根据数据划分排序查询输出

时间:2011-11-07 11:56:46

标签: sql

SELECT col2,col3 FROM (
     select * from (
               select * from A 
                 MINUS 
               select * from A where col3 LIKE '63%'
           ) ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END
         )      

这将输出行设为,

      col1  col2   col3
       ----  ----   ----

 1.     x      b     123
 2.     a      y     247
 3.     n      m     634
 4.     l      o     639

基本上,输出分为两部分,显示 col3不喜欢'63%'(第1行和第2行)和 col3喜欢'63%' (第3行和第4行)

现在我需要按col1对每个部分进行排序。即排序第1行和第2行以及第3行和第4行。因此输出应为

        col1  col2   col3
       ----  ----   ----

 1.     a      y       247
 2.     x      b     123
 3.     l      o     639
 4.     n      m     634

有人帮我查询了应该添加到查询中的内容。

编辑:嗯,我不确定这个想法,但在这种情况下,小组是否有帮助

由于

2 个答案:

答案 0 :(得分:1)

您可以通过任何一组表达式进行排序。用','

分隔它们
SELECT col2,col3 
  FROM a
 ORDER BY (CASE WHEN col1 like '63%' THEN 2 ELSE 1 END), col1

答案 1 :(得分:0)

嗯,我不确定我是否

SELECT col2,col3 
  FROM ( select * 
           from ( select * from A 
                  MINUS 
                  select * from A where col1 LIKE '63%'
                ) 
          ORDER BY CASE WHEN col1 like '63%' THEN 2 ELSE 1 END
        )

可以给你这个结果:

     col1  col2   col3
     ----  ----   ----

1.     x      b     123
2.     a      y     247
3.     n      m     634
4.     l      o     639

与原始查询一样,输出只有两列(select col2,col3 from)。

您的查询可以简化一些,例如

SELECT col1, col2, col3 
  FROM A 
 WHERE col1 NOT LIKE '63%'                    
 ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END

现在,您可以将另一条规则附加到ORDER BY

SELECT col1, col2, col3 
  FROM A 
 WHERE col1 NOT LIKE '63%'                    
 ORDER BY CASE WHEN col3 like '63%' THEN 2 ELSE 1 END, col1

HTH