Как заменить строку, если в T-SQL запись NULL - PullRequest
9 голосов
/ 02 апреля 2011

Я пишу отчет T-SQL, который показывает количество учетных записей, которые находятся в разных статусах для разных клиентов. В результате отчет выглядит примерно так:

Customer1    NoService        7
Customer1    IncompleteOrder  13
Customer1    NULL             9
Customer2    NoService        12
Customer2    Available        19
Customer2    NULL             3
...

Статус 'NULL' является действительными данными, но вместо отображения NULL я хочу отобразить "Ожидание". Вот мой SQL до сих пор:

USE cdwCSP;
SELECT
   sr.sales_region_name   AS SalesRegion
   , micv.value
   , COUNT(sr.sales_region_name)
FROM prospect p
   LEFT JOIN sales_region sr
     ON p.salesRegionId = sr.sales_region_number
   LEFT JOIN prospectOrder po
     ON po.prospectId = p.prospectId
   LEFT JOIN wo
     ON wo.prospectId = p.prospectId
   LEFT JOIN woTray wot
     ON wot.woId = wo.woId
   LEFT JOIN miscInformationCustomerCategory micc
     ON micc.prospectId = p.prospectId
   LEFT JOIN miscInformationCustomerValues micv
     ON micv.miscInformationCustomerCategoryId = micc.miscInformationCustomerCategoryId
   LEFT JOIN miscInformationCategory mic
     ON micc.miscInformationCategoryId = mic.miscInformationCategoryId
WHERE wot.dateOut IS NULL
     AND mic.categoryName LIKE '%Serviceability%'
GROUP BY sr.sales_region_name, micv.value
ORDER BY sr.sales_region_name, micv.value;

Буду признателен за любую помощь, я все еще изучаю T-SQL, поэтому на этот вопрос может быть легко ответить.

Ответы [ 3 ]

21 голосов
/ 02 апреля 2011

Вы можете использовать COALESCE или ISNULL.Первый является стандартным и возвращает первый NOT NULL аргумент (или NULL, если все аргументы NULL)

SELECT COALESCE(micv.value,'Pending') as value

ISNULL ограничен только 2 аргументами, но более эффективен в SQL Serverесли первое проверяемое значение является дорогостоящим для оценки (например, подзапрос).

Одна потенциальная "ошибка" с ISNULL, о которой следует знать, - это то, что она возвращает тип данных первого параметра, поэтому, если строкабыть замененным дольше, чем позволил бы тип данных столбца, вам понадобится приведение.

Например

CREATE TABLE T(C VARCHAR(3) NULL);

INSERT T VALUES (NULL);

SELECT ISNULL(C,'Unknown')
FROM T

Вернет Unk

Но ISNULL(CAST(C as VARCHAR(7)),'Unknown') или COALESCE будет работать как нужно.

0 голосов
/ 02 апреля 2011
SELECT
   sr.sales_region_name   AS SalesRegion
   , ISNULL(micv.value,'Pending')
   , COUNT(sr.sales_region_name)
FROM prospect p
--(...)

Пройдите проверку ISNULL для получения дополнительной информации.

0 голосов
/ 02 апреля 2011

Вы также можете использовать ISNULL('value', 'replacewithvalue')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...