SQL查询根据多列中的值将某些行放在顶部

时间:2014-06-04 16:28:29

标签: sql sql-server sql-server-2008

考虑下表

    CREATE TABLE #temp 
  ( 
     color1 VARCHAR(10),color2 VARCHAR(10),color3 VARCHAR(10) 
  ) 

INSERT INTO #temp 
VALUES      ('R','R','R'), 
            ('R','R','B'), 
            ('R','B','B'), 
            ('R','R','G'), 
            ('R','G','G'), 
            ('B','B','B'), 
            ('B','B','G'), 
            ('B','G','G'), 
            ('B','B','R'), 
            ('B','G','R'), 
            ('G','G','G'), 
            ('G','G','B'), 
            ('G','B','B'), 
            ('G','G','R'), 
            ('G','R','R') 

我需要输出的顺序,以便包含值'R'(在三列中的任何一列中)的行应该是结果的顶部。有什么建议吗?

注意:以下查询无效。

SELECT * 
FROM   #temp 
ORDER  BY color1 DESC,color2 DESC,color3 DESC 

预期输出

color1  color2  color3
R   R   R
R   R   B
R   B   B
R   R   G
R   G   G
B   B   R
B   G   R
G   G   R
G   R   R
G   G   G
G   G   B
G   B   B
B   B   B
B   B   G
B   G   G

提前致谢。

1 个答案:

答案 0 :(得分:4)

SELECT *
FROM TEMP
ORDER BY CASE WHEN Color1='R' OR Color2='R' OR Color3='R' THEN 0 ELSE 1 END