从 1 table 中提取时显示来自 SQL 查询的 2 个不同长度的列

Displaying 2 different length columns from SQL query when pulling from 1 table

我使用以下代码从我的 table.

中提取数据
    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;

目前,这 returns 2 列是应该的,但是第一个条件不成立时,它将 "NULL" 放在测试列中,第二个条件不成立时,它在其各自的列中 returns 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

也许您想将其包装为子 select:

SELECT * FROM
(
   Your statement here
)
WHERE Test IS NOT NULL AND Test2 IS NOT NULL

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

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
  1. 返回 NULL 的原因是您没有在 case 语句中指定 ELSE 子句。 (参见 Return 类型部分: https://msdn.microsoft.com/en-us/library/ms181765.aspx)

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

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

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