Как заменить 0 на н / д - PullRequest
       4

Как заменить 0 на н / д

0 голосов
/ 01 февраля 2019

В моем заявлении case я использую 0, если значение NULL.Теперь я хочу заменить 0 на N/A.Я пытался использовать ISNULL и COALESCE, но он не работает.

Ниже приведен мой код.

SELECT BOM.STYLE_ID, BOM.SEASON_ID,
       SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%emb%') THEN 1 ELSE 
           ISNULL(0, 'N/A') END) AS EMBRO,
       SUM(CASE WHEN BOM.Ad_compo_desc LIKE UPPER('%print%') THEN 1 ELSE 
           ISNULL(0, 'N/A') END) AS PRINTING
FROM IPLEXSTY_AD_BOM_DTL BOM
WHERE CONTENT_CLASS = 'ART'
GROUP BY BOM.STYLE_ID, BOM.SEASON_ID;

Ответы [ 4 ]

0 голосов
/ 08 февраля 2019

Пожалуйста, попробуйте это, включите 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;
0 голосов
/ 01 февраля 2019

ISNULL и COALESCE работают, если первый передаваемый параметр равен NULL, поэтому он возвращает второй параметр, но если первый параметр имеет значение NOT NULL, то он никогда не вернет второй параметр, который в вашем случае равен N / A.

Declare @firstparam int
set @firstparam =NULL
select ISNULL(@firstparam,'N/A')
0 голосов
/ 01 февраля 2019

Вы можете использовать его с функцией 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;

Вот ссылка

0 голосов
/ 01 февраля 2019

В 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,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...