如何加入顺序值

时间:2016-02-29 20:28:55

标签: parent-child sql-server-2012-express rowid

我的文件包含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
...

有没有办法加入像这样的亲子记录?

1 个答案:

答案 0 :(得分:0)

要从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