Объединить столбцы в t-sql, но исключить столбцы, которые являются нулевыми - PullRequest
0 голосов
/ 10 мая 2018
SELECT 'Column 1: ' + t.Column1 + 
'Column 2: ' + t.Column2 + 
'Column 3: ' + t.Column3 
from Table1 t

Так что мне нужна пользовательская строка перед каждым столбцом, как показано. Однако, если, например, Column2 имеет значение null, я хочу исключить всю часть 'Column 2:' + t.Column2.

Где предложение показывать только ненулевые столбцы - это не то, что я ищу, так как действительно, что все 3 столбца являются нулевыми для некоторых строк.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

В SQL Server объединение null в строку приведет к null. Воспользовавшись этим фактом, вы можете сделать что-то вроде этого:

SELECT ISNULL('Column 1: ' + t.Column1, '') + 
       ISNULL('Column 2: ' + t.Column2, '') + 
       ISNULL('Column 3: ' + t.Column3, '') 
FROM Table

В SQL Server 2012 или более поздней версии вы можете использовать встроенную функцию Concat, но вам все равно нужно объединить столбцы в их жестко запрограммированное описание старым способом, чтобы воспользоваться преимуществом эффекта, описанного ранее.

SELECT CONCAT('Column 1: ' + t.Column1, 
              'Column 2: ' + t.Column2, 
              'Column 3: ' + t.Column3) 
FROM Table
0 голосов
/ 10 мая 2018

Предполагая, что CONCAT_NULL_YIELDS_NULL включено (это по умолчанию и должно быть), вы можете сделать что-то вроде:

SELECT COALESCE('Column 1: ' + t.Column1,'') + 
COALESCE('Column 2: ' + t.Column2,'') + 
COALESCE('Column 3: ' + t.Column3,'')
from Table1 t

Если какой-либо столбец равен NULL, то 'Column name ' + Column будет NULL. COALESCE затем заменяет NULL s на пустые строки, так что внешние + s объединяют строки, отличные от NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...