Concat 2 столбца на основе идентификатора на SQL сервере - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь объединить 2 столбца на основе одного и того же идентификатора, но возникла проблема, когда нулевое значение в любом из 2 столбцов приводит к тому, что результат равен нулю

Данные выглядят следующим образом

 ID  Notes      Date
-----------------------
 1   notes1     3/1/20
 1   notes2     3/2/20
 1   notes3     3/3/20
 2   notes1
 2   notes2

Желаемый вывод

Id    CombinedNotes
-------------------------------------------------------------------------
1     Date: 3/1/20 Notes: Notes1 Date: 3/2/20 Notes: Notes2 Date: 3/3/20 Notes: Notes3
2     Date: NUll Notes: Notes1 Date: Null Notes: Notes2

Фактический выходной ток:

Id    CombinedNotes
-----------------------------------------------------------------------------
1     Date: 3/1/20 Notes: Notes1 Date: 3/2/20 Notes: Notes2 Date: 3/3/20 Notes: Notes3
2     Null

Я выполняю этот запрос

SELECT DISTINCT
    t2.[id],
    STUFF ((SELECT ' Date: ' + t1.[date] + ' Notes:' + [notes]   
            FROM [dbo].[test1] t1
            WHERE t1.[id] = t2.[id]
            FOR XML PATH ('')), 1, 2, '')
FROM
    [dbo].[test1] t2  

Результат выглядит следующим образом:

enter image description here

Что я должен изменить, а также возможно ли не иметь 'Date:', например, когда оно пустое, поэтому желаемый результат будет выглядеть следующим образом

 2        Notes: Notes1 Notes: Notes2

Спасибо

1 Ответ

0 голосов
/ 11 марта 2020

{Some string} + {NULL Value} = NULL В этом проблема. Поскольку у вас есть ' Date: ' + t1.[date] + ' Notes:' + [notes], это означает ' Date:' + '3/1/20' + 'Notes:' + NULL, что возвращает NULL.

. Используйте ISNULL (или COALESCE), чтобы вернуть буквальное значение 'NULL':

' Date: '  + t1.[date] + ' Notes:' + ISNULL([notes],'NULL')

Примечание: Кроме того, поскольку вы заключаете t1.[date] в CONVERT / CAST, это сильно означает, что [date] - это не date, а varchar , Вы действительно должны исправить свой тип данных там. Храните даты в типе данных даты (и времени). varchar это не тип данных «один размер подходит всем».

Кроме того, у вас есть проблема с тем, что значение равно '3/1/20' Какая дата который? 3 января 2020 года? 1 марта 1920 года? 20 января 2003 года? Список можно продолжить. Этот столбец нуждается в исправлении .

...