从 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
返回 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;
即使您避免在错误评估时返回 NULL,您可能 运行 遇到的另一个问题是您正在构建一个 table 有两个不相关的列并将它们设置为彼此相等。
不是生成列长度不匹配的 table,而是插入 Null 值以确保列长度相等:
# Test Test2
1 Foo Thing1
2 Thing2 Bar
3 Smith NULL
4 Value NULL
在这种情况下,IsNull() 会将返回的 NULL 值设置为指定值,但可能不会提供任何额外的好处。
我使用以下代码从我的 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
返回 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;
即使您避免在错误评估时返回 NULL,您可能 运行 遇到的另一个问题是您正在构建一个 table 有两个不相关的列并将它们设置为彼此相等。
不是生成列长度不匹配的 table,而是插入 Null 值以确保列长度相等:# Test Test2
1 Foo Thing1
2 Thing2 Bar
3 Smith NULL
4 Value NULL
在这种情况下,IsNull() 会将返回的 NULL 值设置为指定值,但可能不会提供任何额外的好处。