【发布时间】:2019-01-19 03:38:14
【问题描述】:
我在视图中有以下 CTE,我想添加一些 NULLIF(或等效)函数,以便如果 WTHD_BOX16 是 NULL 然后替换为空字符串(空白),否则显示该值。
WITH VWDETAIL AS
( SELECT VENDOR_ID , 'PA/13679089' AS WTHD_BOX17 , WTHD_BASIS_AMT AS WTHD_BOX18 , YEAR(PYMNT_DT) AS YEAR ,
CASE WHEN PYMNT_DT <= '01/31/2014' THEN '1099' ELSE 'NGC' END AS WTHD_CNTL_ID
FROM PS_WTHD_TRXN_TBL A
WHERE WTHD_CLASS IN ('01','02','07')
AND BUSINESS_UNIT IN ('10000','50000')
AND PYMNT_DT <= CASE BUSINESS_UNIT WHEN '10000' THEN '01/31/2014' ELSE '12/31/2018' END)
, BOX16DATA AS
( SELECT --A.BUSINESS_UNIT, A.VOUCHER_ID,
A.PYMNT_TYPE, SUM(A.PAID_AMT) AS BOX16PAIDAMT, SUM(A.PYMNT_GROSS_AMT) AS WTHD_BOX16, B.VENDOR_ID, YEAR(A.SCHEDULED_PAY_DT) AS 'Year'
FROM PS_PYMNT_VCHR_XREF A
INNER JOIN PS_VOUCHER B ON B.BUSINESS_UNIT = A.BUSINESS_UNIT AND B.VOUCHER_ID = A.VOUCHER_ID
WHERE PYMNT_TYPE = 'W'
AND REMIT_VENDOR = '47860A'
GROUP BY B.VENDOR_ID, A.PYMNT_TYPE, YEAR(A.SCHEDULED_PAY_DT)
)
SELECT A.VENDOR_ID, B.WTHD_BOX16, WTHD_BOX17 , SUM(WTHD_BOX18) AS WTHD_BOX18 , YEAR , WTHD_CNTL_ID
FROM VWDETAIL A
LEFT OUTER JOIN BOX16DATA B ON B.VENDOR_ID = A.VENDOR_ID AND B.Year = YEAR
GROUP BY A.VENDOR_ID , WTHD_BOX17 , YEAR , WTHD_CNTL_ID, B.WTHD_BOX16
ORDER BY A.YEAR
GO
我将NULLIF 添加到最终的Select 语句中,但是我得到了错误“将数据类型varchar 转换为数字时出错”。
SELECT A.VENDOR_ID, NULLIF(B.WTHD_BOX16, ''), WTHD_BOX17 , SUM(WTHD_BOX18) AS WTHD_BOX18 , YEAR , WTHD_CNTL_ID
FROM VWDETAIL A
LEFT OUTER JOIN BOX16DATA B ON B.VENDOR_ID = A.VENDOR_ID AND B.Year = YEAR
GROUP BY A.VENDOR_ID , WTHD_BOX17 , YEAR , WTHD_CNTL_ID, B.WTHD_BOX16
ORDER BY A.YEAR
GO
如何解决这个问题,以便在没有 NULL 和 NULL 行的空字符串的情况下获得数值?使用 MS SQL Server。
【问题讨论】:
-
如果列是数字,您可能需要 0。请改用
NULLIF(B.WTHD_BOX16, 0)或COALESCE(B.WTHD_BOX16,0) -
如果返回为NULL,我宁愿有一个空白(空字符串)
-
你不能有一个空字符串——它不是一个字符串!
-
ISNULL(CAST(B.WTHD_BOX16 AS VARCHAR(50)), '') AS WTHD_BOX16似乎在最终的 Select 查询中起作用。 -
好的,这会改变您的选择返回的类型...调用应用程序有效吗?
标签: sql sql-server-2014