さまざまな顧客のさまざまなステータスにあるアカウントの数を示す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を学んでいるので、これは簡単に答えられる質問かもしれません。
COALESCE
またはISNULL
を使用できます。前者は標準であり、最初の_NOT NULL
_引数を返します(または、すべての引数がNULL
の場合はNULL
)
_SELECT COALESCE(micv.value,'Pending') as value
_
ISNULL
は2つの引数のみに制限されていますが、テストする最初の値の評価にコストがかかる場合(サブクエリなど)、SQLServerではより効率的です。
ISNULL
で注意すべき潜在的な「落とし穴」の1つは、最初のパラメーターのデータ型を返すため、置換する文字列が列のデータ型よりも長い場合は、キャストが必要になることです。
例えば。
_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
はどちらも希望どおりに機能します。
ISNULL('value', 'replacewithvalue')
を使用することもできます
SELECT
sr.sales_region_name AS SalesRegion
, ISNULL(micv.value,'Pending')
, COUNT(sr.sales_region_name)
FROM prospect p
--(...)
詳細については、 [〜#〜] isnull [〜#〜] を確認してください。