在一列中返回多个CASE语句中的任何一个

时间:2013-05-03 03:50:08

标签: sql-server sql-server-2008 tsql

除非此处的所有CASE语句均为True,否则会为整个Null列返回Options。 我无法弄清楚的是如何返回任何True CASE语句,即:如果Col2,Col4不为null,则仅返回这些值。我不知道还有什么可以尝试,帮助?

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语句,否则它会为Options列返回Null。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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
    ;