Выберите запрос для добавления столбцов с помощью оператора запятой и игнорирования пустых или пустых значений - PullRequest
1 голос
/ 14 июля 2011

У нас есть требование добавить около трех столбцов таблицы varchar с запятой. Также нам нужно игнорировать пустые или пустые значения во время добавления. Предположим, что структура таблицы следующая:

declare @t table (col1 varchar(10),col2 varchar(10),col3 varchar(10))
insert into @t
select 'test1','test2','test3' union all
select 'test4',null,'test5' union all
select null,null,'test6' union all
select '','test7',''

Ожидаемый результат должен быть таким, как показано ниже

Result
--------------------------------
test1,test2,test3
test4,test5
test6
test7

Я пытался использовать операторы case, но запрос становится очень сложным. Кстати, мы используем SQL Server 2005. Ищем любое легкое и простое решение. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Вот очень альтернативный способ

select reverse(stuff(reverse(coalesce(replace(col1, col1, col1 + ','), '')+ 
coalesce(replace(col2, col2, col2 + ','), '')+
coalesce(replace(col3, col3, col3 + ','), '')), 1,1,'')) Result from @t
2 голосов
/ 14 июля 2011

Не очень элегантно;

;with T(string) as (
    select
      isnull(case col1 when '' then null else col1 + ',' end, '')
    + isnull(case col2 when '' then null else col2 + ',' end, '')
    + isnull(case col3 when '' then null else col3 + ',' end, '')
    from @t
)
select left(string, abs(len(string) - 1)) from T
1 голос
/ 14 июля 2011

Как правило, просто добавьте запятую к каждому столбцу, если этот столбец не пуст / пуст. Затем удалите последнюю запятую из результата.

SELECT
    CASE
        WHEN RIGHT(T.outColumn, 1) = ',' THEN SUBSTRING(T.outColumn, 1, LEN(T.outColumn) - 1)
        ELSE T.outColumn
    END
FROM
    (
    SELECT
        ISNULL(col1, '') + CASE WHEN ISNULL(col1, '') <> '' THEN ',' ELSE '' END +
        ISNULL(col2, '') + CASE WHEN ISNULL(col2, '') <> '' THEN ',' ELSE '' END +
        ISNULL(col3, '') AS outColumn
    FROM
        @t
    ) AS T
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...