我在db2中有一个表要排序。该表有四列。 数据如下:
KEY Type GROUP_ID SpecialType
2 T02 700 S
2 T01 500 R
1 T02 300 B
2 T02 600 S
1 T02 400 S
2 T02 700 B
1 T01 400 R
1 T02 300 S
2 T02 600 B
排序顺序具有以下规则:
KEY
结果应该以这种形式显示
KEY Type GROUP_ID SpecialType
1 T01 400 R
1 T02 400 S
1 T02 300 B
1 T02 300 S
2 T01 500 R
2 T02 600 B
2 T02 600 S
2 T02 700 B
2 T02 700 S
我试过这个ORDER BY
,但它不起作用:
select * from myTable
ORDER BY KEY, GROUP_ID, CASE WHEN SPECIALTYPE = 'R' THEN 1
WHEN SPECIALTYPE='B' THEN 2
ELSE 3 END
任何想法?
答案 0 :(得分:2)
这应该按照您提供的顺序返回列表。它包括一个分析函数,它计算次数' R' R'包含在每个GroupId中,以便首先列出这些groupId。
SELECT
t.KeyId,
t.TypeName,
t.GroupId,
t.SpecialType
FROM @Table t
ORDER BY
KeyId,
CASE WHEN SpecialType = 'R' THEN 1 ELSE 2 END,
COUNT(CASE WHEN t.SpecialType = 'R' THEN SpecialType END) OVER (PARTITION BY t.GroupId) DESC,
GroupId,
SpecialType
答案 1 :(得分:1)
你几乎就在那里。
尝试select * from myTable ORDER BY KEY, CASE WHEN SPECIALTYPE = 'R' THEN 1 ELSE 2 END, GROUP_ID
答案 2 :(得分:1)
您需要创建表来定义排序首选项,如此
Preferance
---------------------------------------------
SpecialType OrderNo
---------------------------------------------
R 1
B 2
S 3
现在将此表与您的主表连接并从此表中选择订单列,并使用orderNo列对您的记录进行排序
select T.*, P.orderNo
from myTable T
INNER JOIN Preferance P ON T.Preferance = P.Preferance
ORDER BY T.KEY, T.GROUP_ID, P.orderNo