通过使用条件结果的大小写和分区row_number()

时间:2012-10-04 14:16:21

标签: sql-server tsql

我有一个SQL,我无法正确返回订单。下面是行和我希望它们出现的顺序的示例。我尝试了ORDER BY WITH CONDITIONAL CASE和ROW_NUMBER OVER PARTION没有成功。只有当ColC的长度<1时,我才希望ColA成为主要的排序和ColB辅助。 3否则ColB是主要的,ColA是次要的

ColA      ColB      ColC            
5   750 15  
5   750 15  
3   984 13  
3   984 13  
5   1021    15  
5   1021    15  
4   1602    14  
4   1602    14  
4   1823    14  
4   1823    14  
6   4099    16  
6   4099    16  
11  4099    240990  
0   10880   10  
0   10880   10  
3   10881   13  
3   10881   13  
2   11053   12  
8   11053   211053  
6   10891   16  
6   10891   16  
2   11034   12  
10  11034   211034  

ColA      ColB      ColC            
0   10880   10  
0   10880   10  
2   11034   12  
10  11034   211034  
2   11053   12  
8   11053   211053  
3   984 13  
3   984 13  
3   10881   13  
3   10881   13  
4   1602    14  
4   1602    14  
4   1823    14  
4   1823    14  
5   750 15  
5   750 15  
5   1021    15  
5   1021    15  
6   4099    16  
6   4099    16  
11  4099    240990  
6   10891   16  
6   10891   16  

1 个答案:

答案 0 :(得分:3)

order by case when len(ColC) < 3 then ColA else ColB end, 
    case when len(ColC) < 3 then ColB else ColA end

SQL Fiddle Example