2016-11-07 54 views
1

我有以下数据。任何地方FirstName都是空白的我想将Note数据结合到前一行的Note的末尾。这个例子是数据如何在没有排序的情况下出现在表格中。有没有办法通过SQL完成结果表?谢谢你的帮助!连接两行数据

FirstName LastName Note 
--------- ------- -------------------------------------- 
John  Doe  likes bananas 
Steve  Weiss  likes tomatoes and 
         also likes potatoes 
John  Weiss  likes apples 
Jeff  Marki  likes hotdogs 
         and also likes hambugers 
Jenny  Boper  likes peaches 

预期结果

FirstName LastName Note 
--------- ------- -------------------------------------- 
John  Doe  likes bananas 
Steve  Weiss  likes tomatoes and also likes potatoes       
John  Weiss  likes apples 
Jeff  Marki  likes hotdogs and also likes hamburgers 
Jenny  Boper  likes peaches 
+1

这是你而不是如何存储在数据库中的数据。没有排序,下一行是任意的,你*不能*得到你正在寻找的结果。当你在一两个小时前问过这个问题时,我发现没有人再发布同样的问题。 –

+0

@vkp我在一个小时前问的问题导致了很多困惑的人没有真正回答我的问题,所以我决定删除它并重新使它更清楚。有没有更好的方式来处理问题,导致超出我所做的混淆的问题?无论如何,如果不能实现我要去做的事情,那就是我想知道的。 – bmanhard

+1

如果存在行序列,即标识字段 –

回答

2
Declare @YourTable table (FirstName varchar(50),LastName varchar(50),Note varchar(500)) 
Insert Into @YourTable values 
('John','Doe','likes bananas'), 
('Steve','Weiss','likes tomatoes and'), 
(''  ,'','also likes potatoes'), 
('John','Weiss','likes apples'), 
('Jeff','Marki','likes hotdogs'), 
('' ,'','and also likes hambugers'), 
('Jenny','Boper','likes peaches') 

Select FirstName 
     ,LastName 
     ,Note  = FullText 
From (
     Select * 
       ,FullText = Note+IIF(Lead(FirstName,1) over (Order By (Select null))='',' '+Lead(Note,1) over (Order By (Select Null)),'') 
     From @YourTable 
    ) A 
Where FirstName <>'' 

返回

FirstName LastName Note 
John  Doe   likes bananas 
Steve  Weiss  likes tomatoes and also likes potatoes 
John  Weiss  likes apples 
Jeff  Marki  likes hotdogs and also likes hambugers 
Jenny  Boper  likes peaches 

请注意:

在那里我有顺序按(SELECT NULL)),你应该有一个正确的序列号,即标识字段

1

另一种解决方案:

DECLARE @TEMP_DATA TABLE 
    (
    ID INT IDENTITY(1,1), 
    FIRSTNAME NVARCHAR(50), 
    LASTNAME NVARCHAR(50), 
    NOTE NVARCHAR(50) 
    ) 

DECLARE @NO_NAME TABLE 
    (
    IDEMPTY INT, 
    EMPTYNAME NVARCHAR(50), 
    EMTPYNAME NVARCHAR(50), 
    NOTE2 NVARCHAR(50) 
    ) 

INSERT INTO @TEMP_DATA 
SELECT * 
FROM DATA 

INSERT INTO @NO_NAME 
SELECT * 
FROM @TEMP_DATA 
WHERE FIRSTNAME='' 

UPDATE @TEMP_DATA 
SET  NOTE=NOTE+' '+NOTE2 
FROM @NO_NAME N 
WHERE ID=IDEMPTY-1 

SELECT FIRSTNAME,LASTNAME,NOTE FROM @TEMP_DATA WHERE NOT FIRSTNAME LIKE ''