2016-11-07 2 views
1

У меня следующие данные. Anywhere FirstName пусто. Я хотел бы объединить данные 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 

Пожалуйста, обратите внимание:

Где есть Order By (Выберите нуль)), вы действительно должны иметь надлежащую порядковый номер т.е. в поле идентификатора

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 '' 
Смежные вопросы