一直试图解决这个问题,但没有成功。
这是我的桌子
SN PID
---- ---------
1 NULL
2 1000005
3 NULL
4 1000002
5 1000005
6 NULL
7 1000002
8 NULL
9 1000005
我需要按 SN 排序,但是当 PID 不为空时,它需要将它们组合在一起。因此,我正在寻找的结果是
SN PID
---- ---------
1 NULL
2 1000005
5 1000005 -- group together with the previous SAME PID
9 1000005 -- continue to group together
3 NULL -- continue to the next unused SN (no more PID = 1000005)
4 1000002
7 1000002 -- group together with the previous SAME PID
6 NULL -- continue to the next unused SN
8 NULL
欣赏任何人的建议。谢谢!
我将通过使用一个人工列进行排序来解决这个问题,该列等于SN
所有具有相同MINPID
或等于SN
whenPID
为 null的行的 MIN 。
SELECT *,
CASE
WHEN PID IS NULL THEN SN
ELSE (SELECT MIN(t2.SN) FROM MyTable t2 WHERE t2.PID=t1.PID)
END AS sortby
FROM MyTable t1
ORDER BY sortby, SN
如果您需要sortby
在输出中排除,您可以将上述内容用作 CTE,或者您可以将 CASE 表达式直接插入 ORDER BY 并将其排除在 SELECT 列表之外。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句