我有这张表:
+-------------+-----------------------+----------------------+
| supplier_id | supplier_aggregate_id | supplier_description |
+-------------+-----------------------+----------------------+
| &&%% | null | UNDEFINED |
| ... | &&%% | UNDEFINED |
| + | null | UNDEFINED |
| , | &&%% | UNDEFINED |
| . | &&%% | UNDEFINED |
+-------------+-----------------------+----------------------+
我想选择这样的结果:
+-------------+-----------------------+----------------------+
| supplier_id | supplier_aggregate_id | supplier_description |
+-------------+-----------------------+----------------------+
| &&%% | null | UNDEFINED |
| , | &&%% | UNDEFINED |
| . | &&%% | UNDEFINED |
| ... | &&%% | UNDEFINED |
| + | null | UNDEFINED |
+-------------+-----------------------+----------------------+
即:具有 supplier_id
的行,后跟 supplier_aggregate_id
等于第一行 supplier_id
的所有行。
我尝试订购:
SELECT supplier_id, supplier_aggregate_id, supplier_description
FROM suppliers
ORDER BY supplier_id ASC, supplier_aggregate_id ASC;
但是我在第一个 &&%%
记录之后得到了 +
记录,这是不正确的:
+-------------+-----------------------+----------------------+
| supplier_id | supplier_aggregate_id | supplier_description |
+-------------+-----------------------+----------------------+
| &&%% | null | UNDEFINED |
| + | null | UNDEFINED | <-- this should be here
| , | &&%% | UNDEFINED | |
| . | &&%% | UNDEFINED | |
| ... | &&%% | UNDEFINED | |
+-------------+-----------------------+----------------------+ <--------------------+
有没有办法通过单个查询来完成此任务?
最佳答案
最简单的事情是这样的:
select
s.supplier_id,
s.supplier_aggregate_id,
s.supplier_description
from suppliers s
order by
COALESCE(s.supplier_aggregate_id, s.supplier_id) asc,
s.supplier_aggregate_id;
关于sql - 对 "super row"之后的行进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728326/