2013-05-03 2 views
2

Если все CASE операторов здесь True, он возвращает Null для всего столбца Options. То, что я не могу понять, - это вернуть любые статусы True CASE, т. Е. Если Col2, Col4 не равен null, то возвращают только те значения. Я понятия не имею, что еще попробовать, помочь?Возврат любого из нескольких операторов CASE в одном столбце

SELECT 
CASE WHEN Col1 Is Not Null THEN '<li>' + Col1 + '</li>' END + 
CASE WHEN Col2 Is Not Null THEN '<li>' + Col2 + '</li>' END + 
CASE WHEN Col3 Is Not Null THEN '<li>' + Col3 + '</li>' END + 
CASE WHEN Col4 Is Not Null THEN '<li>' + Col4 + '</li>' END Options 
FROM TABLE 

Опять же, вопрос, если все Case заявления не будут найдены, то возвращается Null для Options столбца.

+0

Функция IIF воспитывает более хороший формат (это короткий путь для написания заявления дела) - http://msdn.microsoft.com/en-us/library/ms145994(v= sql.110) .aspx – gotqn

ответ

5

Как это:

SELECT 
CASE WHEN Col1 Is Not Null THEN '<li>' + Col1 + '</li>' ELSE '' END + 
CASE WHEN Col2 Is Not Null THEN '<li>' + Col2 + '</li>' ELSE '' END + 
CASE WHEN Col3 Is Not Null THEN '<li>' + Col3 + '</li>' ELSE '' END + 
CASE WHEN Col4 Is Not Null THEN '<li>' + Col4 + '</li>' ELSE '' END Options 
FROM TABLE 
+0

Это сработало! Благодарю. –

2

What @Pieter said, конечно, но есть также

  1. ISNULL:

    SELECT 
        ISNULL('<li>' + Col1 + '</li>', '') + 
        ISNULL('<li>' + Col2 + '</li>', '') + 
        ISNULL('<li>' + Col3 + '</li>', '') + 
        ISNULL('<li>' + Col4 + '</li>', '') AS Options 
    FROM TABLE 
    ; 
    

    и

  2. COALESCE:

    SELECT 
        COALESCE('<li>' + Col1 + '</li>', '') + 
        COALESCE('<li>' + Col2 + '</li>', '') + 
        COALESCE('<li>' + Col3 + '</li>', '') + 
        COALESCE('<li>' + Col4 + '</li>', '') AS Options 
    FROM TABLE 
    ; 
    
Смежные вопросы