Исключать нулевые записи при объединении

#sql #sql-server

#sql #sql-сервер

Вопрос:

У меня есть столбцы

 Col1|Col2|Col3
Aaaa|Bbbb|Cccc
Null|Bbbb|Cccc
Aaaa|Bbbb|Null
 

Мой результат должен выглядеть так

 Aaaa,Bbbb,Cccc
Bbbb,Cccc
Aaaa,Bbbb
 

Я попробовал это с помощью обычного способа конкатенации ‘ ‘, например

 Select Col1   ', '   Col2   ', '   Col3 
 

но с помощью этого оператора я получаю Null в результирующем наборе, если в одном из столбцов есть Null. Я мог бы сделать что-то вроде

 ISNULL(Col1, ' ') 
 

но это приводит к тому, что знаки ‘,’ путаются

Кто-нибудь может мне здесь помочь?

Ответ №1:

Эта CONCAT() функция решает вашу проблему:

 Select CONCAT(Col1, ', ', Col2, ', ', Col3)
 

Он игнорирует NULL значения.

Поддержка самых последних версий SQL Server CONCAT_WS() :

 CONCAT_WS(', ', col1, col2, col3)
 

Это приводит к несколько иным результатам. Например, если вторые два значения равны NULL , то первое возвращает 'A,,' значение, а второе возвращает 'A' значение. Я не уверен, чего ты на самом деле хочешь.

Комментарии:

1. CONCAT_WS выполнил задание. Большое спасибо!