在我的case语句中,如果值是print(sum(map(int, open("file.txt"))))
,则使用0
。现在,我想将NULL
替换为0
。我尝试使用N/A
和ISNULL
,但无法正常工作。
下面是我的代码。
COALESCE
答案 0 :(得分:1)
请尝试此操作,在引号('1')中包含1,这会将1转换为字符串,然后也会加载'N / A',因此该列将用作字符串类型,而无需转换1它将作为整数类型由于您尝试在同一列中加载1(整数)和'N / A'(字符串),因此会出现错误。
SELECT BOM.STYLE_ID, BOM.SEASON_ID,
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%emb%') THEN '1' ELSE
'N/A' END) AS EMBRO,
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%print%') THEN '1' ELSE
'N/A' END) AS PRINTING
FROM IPLEXSTY_AD_BOM_DTL BOM
WHERE CONTENT_CLASS = 'ART'
GROUP BY BOM.STYLE_ID, BOM.SEASON_ID;
答案 1 :(得分:0)
在SQL中,最好使用NULL
而不是'N/A'
。您只需删除else
子句即可完成此操作:
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%emb%') THEN 1 END) AS EMBRO,
如果您确实需要'N/A'
,则需要处理表达式必须返回字符串而不是数字的事实。这需要转换:
COALESCE(CONVERT(VARCHAR(255),
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%emb%') THEN 1 END)
), 'N/A'
) AS EMBRO,
答案 2 :(得分:0)
如果传递的第一个参数为NULL,则ISNULL和COALESCE起作用,因此它将返回第二个参数,但是如果第一个参数为NOT NULL,则它将永远不会返回第二个参数,在您的情况下为'N / A'。 / p>
Declare @firstparam int
set @firstparam =NULL
select ISNULL(@firstparam,'N/A')
答案 3 :(得分:0)
您可以将其与Replace
函数一起使用。所以会是
SELECT BOM.STYLE_ID, BOM.SEASON_ID,
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%emb%') THEN 1 ELSE
Replace(Ad_compo_desc,'0','N/A') END) AS EMBRO,
SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%print%') THEN 1 ELSE
Replace(Ad_compo_desc,'0','N/A') END) AS PRINTING
FROM IPLEXSTY_AD_BOM_DTL BOM
WHERE CONTENT_CLASS = 'ART'
GROUP BY BOM.STYLE_ID, BOM.SEASON_ID;
这里是a link