2010-11-13 127 views
1

如何根據傳遞的參數對查詢結果進行分組。如何根據參數值對查詢結果進行分組

一個小的存儲過程如下所示。參數Param傳遞給過程。

如果參數值爲「f」,則結果必須按啓動時間進行分組,否則使用formid進行分組。我怎樣才能做到這一點。 ???我嘗試了下面的代碼顯示,但它不工作。

DROP PROCEDURE IF EXISTS Test; 
CREATE PROCEDURE Test (Param VARCHAR (2)) 


BEGIN 
    SELECT formid, starttime 
    FROM tbevaluationscoreinfo 
    CASE Param 
    when 'F' 
     then group by starttime; 
    else 
     group by formid; 

    end 
END; 
+0

您需要使用動態SQL。 – ksogor 2010-11-13 08:43:20

+0

@ksogor,不一定:) – Constantin 2010-11-13 15:10:36

回答

2

一種方法是將分支升一級:

IF Param = 'F' THEN 
    SELECT starttime, count(formid) 
    FROM tbevaluationscoreinfo 
    GROUP BY starttime; 
ELSE 
    SELECT formid, count(starttime) 
    FROM tbevaluationscoreinfo 
    GROUP BY formid; 
END IF; 

另一個不那麼推薦的解決方案,是動態的SQL。

而第三個可能的解決方案是:

SELECT 
    case Param when 'F' then starttime else formid end as group_column, 
    count(formid), 
    count(starttime) 
FROM 
    tbevaluationscoreinfo 
GROUP BY 
    group_column; 
+0

謝謝你的回覆。其實我的原始存儲過程非常大。我在問題中寫的存儲過程只是一個模板。因此,使用if來分支查詢使得我的程序的大小太大了。這是唯一的方法嗎?然後我強迫它做:( – 2010-11-13 09:10:29

+0

@Null指針,請嘗試第三種解決方案。不幸的是,我現在無法測試它,請告訴我它是否適用於您 – Constantin 2010-11-13 09:12:36

+0

@Null指針,謝謝!我編輯了答案,那是你的意思嗎? – Constantin 2010-11-13 09:41:09

相關問題