[英]SQL Server ISNULL function not working in derived query
I have the follow query that has a derived (sub-query) column in it.我有以下查询,其中包含派生(子查询)列。 I am using the
ISNULL
function inside it, however my query output still has null values in it.我在其中使用
ISNULL
function,但是我的查询 output 仍然有 null 值。 Why is the ISNULL
function not working as expected?为什么
ISNULL
function 没有按预期工作? The rows that you see resulting to NULL
should actually be outputting as "Test"您看到的导致
NULL
的行实际上应该输出为“测试”
SELECT
PS_PO_HDR.PO_ID,
PS_PO_HDR.BUSINESS_UNIT,
(SELECT ISNULL(PS_PO_COMMENTS_FS.COMMENTS_2000, 'TEST')
FROM PS_PO_COMMENTS_FS PS_PO_COMMENTS_FS
WHERE
-- PS_PO_LINE.PO_ID='0000000003' AND
PS_PO_COMMENTS_FS.BUSINESS_UNIT = PS_PO_LINE.BUSINESS_UNIT
AND PS_PO_COMMENTS_FS.PO_ID = PS_PO_LINE.PO_ID
AND PS_PO_COMMENTS_FS.LINE_NBR = PS_PO_LINE.LINE_NBR
AND PS_PO_COMMENTS_FS.COMMENT_TYPE = 'LIN') AS "NOTE_TO_VENDOR",
'DR' AS 'DISCOUNT_REASON'
FROM
PS_PO_LINE PS_PO_LINE, PS_PO_HDR PS_PO_HDR
WHERE
PS_PO_LINE.BUSINESS_UNIT = PS_PO_HDR.BUSINESS_UNIT
AND PS_PO_LINE.PO_ID = PS_PO_HDR.PO_ID
AND PS_PO_HDR.PO_STATUS NOT IN ('C', 'X', 'PX')
Sample results:样本结果:
PO_ID BUSINESS_UNIT NOTE_TO_VENDOR DISCOUNT_REASON
---------------------------------------------------------------------------
0000000004 11MMS NULL DR
0000000016 41000 NULL DR
0000000021 41000 Test Note1 DR
The NULL
is being returned by the subquery itself, not as a value from a row. NULL
由子查询本身返回,而不是作为行中的值。 The subquery returns no rows, and that is represented as NULL
.子查询不返回任何行,表示为
NULL
。
There are two options for handling this:有两种处理方法:
You can either use aggregation in the subquery:您可以在子查询中使用聚合:
(SELECT ISNULL(MAX(PS_PO_COMMENTS_FS.COMMENTS_2000), 'TEST')
. . .
The aggregation forces the subquery to return one row.聚合强制子查询返回一行。
Or you can move the ISNULL()
logic outside the subquery:或者您可以将
ISNULL()
逻辑移到子查询之外:
ISNULL( (SELECT PS_PO_COMMENTS_FS.COMMENTS_2000
FROM . . .
), 'TEST'
)
SELECT
PS_PO_HDR.PO_ID ,
PS_PO_HDR.BUSINESS_UNIT ,
**ISNULL(**(SELECT ISNULL(PS_PO_COMMENTS_FS.COMMENTS_2000, 'TEST')
FROM PS_PO_COMMENTS_FS PS_PO_COMMENTS_FS
WHERE -- PS_PO_LINE.PO_ID='0000000003' AND
PS_PO_COMMENTS_FS.BUSINESS_UNIT=PS_PO_LINE.BUSINESS_UNIT
AND PS_PO_COMMENTS_FS.PO_ID=PS_PO_LINE.PO_ID
AND PS_PO_COMMENTS_FS.LINE_NBR=PS_PO_LINE.LINE_NBR
AND PS_PO_COMMENTS_FS.COMMENT_TYPE='LIN' ), **'TEST')** AS "NOTE_TO_VENDOR" ,
'DR' AS 'DISCOUNT_REASON'
FROM PS_PO_LINE PS_PO_LINE, PS_PO_HDR PS_PO_HDR
WHERE
PS_PO_LINE.BUSINESS_UNIT=PS_PO_HDR.BUSINESS_UNIT
AND PS_PO_LINE.PO_ID=PS_PO_HDR.PO_ID
AND PS_PO_HDR.PO_STATUS NOT IN ('C','X','PX')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.