0

我使用以下代码从表中提取数据。

    SELECT 
    CASE WHEN VendorContactLName LIKE '%[s]'
        THEN VendorContactFName + ' ' + VendorContactLName + '''' END AS 'Test',
    CASE WHEN VendorContactLName NOT LIKE '%[s]'
        THEN VendorContactFName + ' ' + VendorContactLName + '''s' END AS 'Test2'
    FROM Vendors;

目前,这将返回 2 列,但如果第一个条件不为真,它将“NULL”放在测试列中,而第二个条件不为真,则在其各自的列中返回 NULL。我希望它不这样做,而是根据是否满足条件逐步添加行,并避免其中包含 NULL 的行。

编辑:不确定如何不清楚,但对于视觉表示,这就是当前代码所发生的情况。

Test            Test2
NULL            Francesco Alberto's
NULL            Ania Irvin's
NULL            Lukas Liana's
NULL            Kenzie Quinn's
Michelle Marks' NULL
NULL            Anton Mauro's
NULL            Ted Maegen's
NULL            Erick Kaleigh's
NULL            Kaitlyn Anthoni's
NULL            Bill Leigh's
NULL            Kaitlin Hostlery's

我想要的是这样的:

    Test            Test2
Michelle Marks'    Francesco Alberto's
                   Ania Irvin's
                   Lukas Liana's
                   Kenzie Quinn's
                   Anton Mauro's
                   Ted Maegen's
                   Erick Kaleigh's
                   Kaitlyn Anthoni's
                   Bill Leigh's
                   Kaitlin Hostlery's
4

3 回答 3

0

也许您想将其包装为子选择:

SELECT * FROM
(
   Your statement here
)
WHERE Test IS NOT NULL AND Test2 IS NOT NULL
于 2015-07-16T21:28:46.297 回答
0

在这种情况下,使用外部查询来过滤掉,NULL如下所示。这XXX是内联查询结果集的表别名。

SELECT * FROM (
    SELECT 
CASE WHEN VendorContactLName LIKE '%[s]'
    THEN VendorContactFName + ' ' + VendorContactLName + '''' END AS 'Test',
CASE WHEN VendorContactLName NOT LIKE '%[s]'
    THEN VendorContactFName + ' ' + VendorContactLName + '''s' END AS 'Test2'
    FROM Vendors ) XXX
WHERE Test IS NOT NULL AND Test2 IS NOT NULL;

(或者)

使用ISNULL()类似的功能

SELECT ISNULL(Test, '') as Test, ISNULL(Test2,'') as Test2 FROM (
    SELECT 
CASE WHEN VendorContactLName LIKE '%[s]'
    THEN VendorContactFName + ' ' + VendorContactLName + '''' END AS 'Test',
CASE WHEN VendorContactLName NOT LIKE '%[s]'
    THEN VendorContactFName + ' ' + VendorContactLName + '''s' END AS 'Test2'
    FROM Vendors ) XXX
于 2015-07-16T21:30:52.070 回答
0
  1. 返回 NULL 的原因是您没有在 case 语句中指定 ELSE 子句。(请参阅返回类型部分: https ://msdn.microsoft.com/en-us/library/ms181765.aspx )

    SELECT 
    CASE WHEN VendorContactLName LIKE '%[s]'
        THEN VendorContactFName + ' ' + VendorContactLName + ''''
        ELSE 'Value' 
    END AS 'Test',
    CASE WHEN VendorContactLName NOT LIKE '%[s]'
        THEN VendorContactFName + ' ' + VendorContactLName + '''s'
        ELSE 'Value'
    END AS 'Test2'
    FROM Vendors;
  2. 即使您避免在错误评估时返回 NULL,您可能会遇到的另一个问题是您正在构建一个包含两个不相关列的表并将它们设置为彼此相等。
    与其生成列长度不匹配的表,不如插入 Null 值以确保列长度相等:

    # 测试 Test2 
    1 Foo Thing1
    2 Thing2 Bar
    3 Smith NULL
    4 Value NULL

    在这种情况下,IsNull() 会将返回的 NULL 值设置为指定值,但可能不会提供任何额外的好处。

于 2015-07-16T22:36:00.380 回答