SQL SERVER - 使用CASE过滤SELECT列

时间:2017-04-21 09:19:21

标签: sql-server

有解决办法吗?

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过滤要选择的列。 请帮忙。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

您不能以这种方式使用case表达。

或者你也可以这样做:

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

答案 1 :(得分:0)

如果你事先知道列的数量(并且它是固定的),你可以做这样的事情(不使用动态SQL)。如果列具有相同的dataype,则它可以工作(否则,在某些情况下,您应该添加适当的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