首页 > 解决方案 > 在子选择聚合表达式上使用 ISNULL 并返回空字符串

问题描述

我的查询中有以下子选择表达式。我想要做的是用 ISNULL 函数包装整个聚合表达式,当遇到 NULL 时,我希望它返回一个空字符串 ('')。

我尝试运行以下命令,但出现 Varchar 到 Numeric 转换错误,因为空字符串是 varchar,但表达式是用数字计算的。

SELECT PS_PO_LINE.PO_ID, PS_PO_LINE.PO_DT,

ISNULL((SELECT  SUM (PS_PO_LN_ORDER_VW.AMT_ORDERED)
FROM PS_PO_LN_ORDER_VW PS_PO_LN_ORDER_VW WHERE PS_PO_LN_ORDER_VW.BUSINESS_UNIT=PS_PO_LINE.BUSINESS_UNIT AND  
PS_PO_LN_ORDER_VW.PO_ID=PS_PO_LINE.PO_ID AND PS_PO_LN_ORDER_VW.LINE_NBR=PS_PO_LINE.LINE_NBR 
AND PS_PO_LINE.AMT_ONLY_FLG = 'Y' ), '')  AS "AMOUNT"

FROM PS_PO_LINE PS_PO_LINE

如果 NULL 函数的计算结果为 True,我不想返回 0,我宁愿返回 ''。这可能吗?

标签: sqlsql-server-2014

解决方案


@Charlieface 是对的:ISNULL 将第二个参数强制为第一个参数的类型。也许试试这个

选择 PS_PO_LINE.PO_ID、PS_PO_LINE.PO_DT、

ISNULL(CAST((选择总和(PS_PO_LN_ORDER_VW.AMT_ORDERED)
从 PS_PO_LN_ORDER_VW PS_PO_LN_ORDER_VW 其中 PS_PO_LN_ORDER_VW.BUSINESS_UNIT=PS_PO_LINE.BUSINESS_UNIT 和  
PS_PO_LN_ORDER_VW.PO_ID=PS_PO_LINE.PO_ID 和 PS_PO_LN_ORDER_VW.LINE_NBR=PS_PO_LINE.LINE_NBR
和 PS_PO_LINE.AMT_ONLY_FLG = 'Y' ) 作为 VARCHAR, '') 作为 "AMOUNT"

从 PS_PO_LINE PS_PO_LINE

推荐阅读