如何用N / A代替0

时间:2019-02-01 01:24:31

标签: sql sql-server string replace

在我的case语句中,如果值是print(sum(map(int, open("file.txt")))) ,则使用0。现在,我想将NULL替换为0。我尝试使用N/AISNULL,但无法正常工作。

下面是我的代码。

COALESCE

4 个答案:

答案 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