我确实有一个包含 2 种记录的文件,父母和子记录:
id type filler
-- ---- ------
1 1500 h1
2 1501 d11
3 1501 d12
4 1501 d13
5 1500 h2
6 1501 d21
7 1501 d22
...
我想将记录 1501 连接到相应的 1500 记录,因此,结果必须类似于:
id1 type filler id2 type filler2
--- ---- ------ --- ---- -------
1 1500 h1 2 1501 d11
1 1500 h1 3 1501 d12
1 1500 h1 4 1501 d13
5 1500 h2 6 1501 d21
5 1500 h2 7 1501 d22
...
有没有办法加入这样的父子记录?
要从 id 和 type 中获取顺序,最简单的方法可能是使用公用表表达式用它们的组标记行并连接同一组的行以获得结果,接近;
WITH cte AS (
SELECT *, CASE WHEN type < LAG(type) OVER (ORDER BY id) THEN 1 END cnt
FROM mytable
), cte2 AS (
SELECT id, type, filler, COUNT(cnt) OVER (ORDER BY id) tag FROM cte
)
SELECT a.id, a.type, a.filler, b.id, b.type, b.filler
FROM cte2 a
JOIN cte2 b
ON a.tag = b.tag
WHERE a.type = 1500 AND b.type = 1501
ORDER BY a.id, b.id
id | type | filler | id | type | filler
----+------+--------+----+------+--------
1 | 1500 | h1 | 2 | 1501 | d11
1 | 1500 | h1 | 3 | 1501 | d12
1 | 1500 | h1 | 4 | 1501 | d13
5 | 1500 | h2 | 6 | 1501 | d21
5 | 1500 | h2 | 7 | 1501 | d22