如何联接顺序值



我确实有一个包含 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

相关内容

  • 没有找到相关文章