2011-07-25 106 views
4

我有两个表是这样的:递归INSERT查询

Table1ID    Table2ID Table1ID SomeDate 
--------    ------------------------------ 
1      1   1   2011-01-01 
2      2   1   2011-01-02 
3      3   2   2011-01-01 
4      4   3   2011-01-01 
         5   3   2011-01-02 
         6   3   2011-01-03 
         7   4   2011-01-01 
         8   4   2011-01-02 

我需要插入值到第三个表,让我从表2这两个值,以及分组“序列”值在Table1ID上。我试过这个,但我总是得到序列值为1。

;WITH Sequences AS (
    SELECT t1.Table1ID, 
      MAX(ISNULL(t3.Sequence, 0)) AS [MaxSequence] 
    FROM Table1 t1 
    LEFT JOIN Table3 t3 (NOLOCK) ON t1.Table1ID = t3.Table1ID 
    GROUP BY t1.Table1ID 
) 
INSERT INTO Table3 (Table1ID, Table2ID, Sequence) 
SELECT t1.Table1ID, 
     t2.Table2ID, 
     s.MaxSequence + 1 
FROM Table1 t1 (NOLOCK) 
JOIN Table2 t2 (NOLOCK) ON t1.Table1ID = t2.Table2ID 
JOIN Sequences s ON t2.Table1ID = s.Table1ID 
ORDER BY t2.SomeDate 

我要的是一个结果集是这样的:

Table2ID Table1ID Sequence 
------------------------------ 
1   1   1 
2   1   2 
3   2   1 
4   3   1 
5   3   2 
6   3   3 
7   4   1 
8   4   2 

我知道我可能失去了一些东西太简单在这里,但我坚持。

回答

4
insert into Table3 (Table2ID, Table1ID, Sequence) 
select 
    Table2ID, 
    Table1ID, 
    row_number() over(partition by Table1ID order by Table2ID) 
from Table2 

东西来测试:

declare @Table2 table 
(
    Table2ID int identity, 
    Table1ID int 
) 
insert into @Table2 values 
(1),(1), 
(2), 
(3),(3),(3), 
(4),(4) 

declare @Table3 table 
(
    Table2ID int, 
    Table1ID int, 
    Sequence int 
) 

insert into @Table3 (Table2ID, Table1ID, Sequence) 
select 
    Table2ID, 
    Table1ID, 
    row_number() over(partition by Table1ID order by Table2ID) 
from @Table2 

select * 
from @Table3 

结果:

Table2ID Table1ID Sequence 
----------- ----------- ----------- 
1   1   1 
2   1   2 
3   2   1 
4   3   1 
5   3   2 
6   3   3 
7   4   1 
8   4   2 
+1

*嫌额头*当然自我!忘记ROW_NUMBER()... OVER。谢谢,像魅力一样工作。 –