2017-04-21 88 views
0

是否有解決此問題的方法?SQL SERVER - 篩選使用CASE的SELECT列

SELECT 
    CASE @GROUP 
    WHEN 'A' THEN GRADE1, GRADE2 
    WHEN 'B' THEN GRADE1, GRADE4, GRADE5 
    WHEN 'C' THEN GRADE3, GRADE6 
    WHEN 'D' THEN GRADE2, GRADE5, GRADE6 
    END 
FROM QuizBeeRep 

我想擁有多個THEN,以便根據@GROUP過濾要選擇的列。 請幫忙。 在此先感謝。

+0

「CASE」表達式只能返回單個值。控制查詢中出現的列數的唯一方法是需要動態SQL。 –

+0

請爲您的問題提供一些輸入和輸出數據。它更清晰地幫助... – TriV

回答

0

您不能以這種方式使用case表達式。如果你事先知道列的數量(和它的固定),你可以做這樣的事情(不使用動態SQL)

if @GROUP = 'A' 
    select GRADE1, GRADE2 
    FROM QuizBeeRep 
else if @GROUP = 'B 
    select GRADE1, GRADE4, GRADE5 
    FROM QuizBeeRep 
... and so on 
+0

這是我所要做的。因爲這只是一個具有相同邏輯的示例查詢。我有多個連接表和參數。 – theo

+0

@theo呃...您可以先將所有數據(使用您的複雜邏輯)插入臨時表中,然後根據表中的條件選擇所需的列。 –

0

或者你可以這樣做。如果列有相同的數據行(否則,在某些情況下,您應該添加正確的CAST):它可以工作:

SELECT 
     CASE @GROUP 
     WHEN 'A' THEN GRADE1 
     WHEN 'B' THEN GRADE1 
     WHEN 'C' THEN GRADE3 
     WHEN 'D' THEN GRADE2 
     END AS COL1 
, CASE @GROUP 
     WHEN 'A' THEN GRADE2 
     WHEN 'B' THEN GRADE4 
     WHEN 'C' THEN GRADE6 
     WHEN 'D' THEN GRADE5 
     END AS COL2 
,CASE @GROUP 
     WHEN 'A' THEN NULL 
     WHEN 'B' THEN GRADE5 
     WHEN 'C' THEN NULL 
     WHEN 'D' THEN GRADE6 
     END AS COL3 
    FROM QuizBeeRep 
+0

試過。不工作:( – theo

+0

是的我知道(我在做夢...)請嘗試這一個,但我知道,它有點笨拙... – etsa