2014-02-26 103 views
0

我有一个包含一个表:TSQL结合多个记录

Code  ID1  ID2 
Blue  1   2 
Blue     3 
Blue     4 
Green 1   5 
Green    10 
Green    12 

我需要的结果集:

Code  ID1  ID2 
Blue  1   2 
Blue  1   3 
Blue  1   4 
Blue  1   5 
Green  1   5 
Green  1   10 
Green  1   12 

在ID1数量并不总是与1

启动有任何想法吗??我很难过!

+0

a)蓝色,1,5'从哪里来? b)你是否考虑过'ISNULL(ID1,1)AS ID1'? –

+0

'ID1'应该包含什么?除了关于这方面的更多细节,它可能有助于为该列分配一个默认值,以便它从不“NULL”。 –

+0

ID1可以是任何值..在我的例子中,我只使用了1 - 但它可以是任何东西(500,528,2574 ....) – user1411074

回答

0
Drop Table T1 
Create table T1(Code varchar(10), Id1 int, Id2 int) 
Insert T1 Values 
('Blue', 11, 2), 
('Blue', 12, 3), 
('Blue', NULL, 4), 
('Blue', 15, 5), 
('Blue', NULL, 6), 
('Green', 23, 21), 
('Green', 24, 24), 
('Green',NULL, 25), 
('Green',NULL, 28), 
('Green', 27, 29), 
('Red', 35, 33), 
('Red', NULL, 36), 
('Red', NULL, 38) 

SELECT 
    A.Code, ISNULL(A. Id1,B.LastId) Id1 , A.Id2 
FROM T1 A 
CROSS APPLY( 
      Select Top 1 Id1 as LastId 
      From T1 
      where A.Code = T1.Code and Id2 <= A.Id2 
      order by id1 desc 
      ) B