web-dev-qa-db-ja.com

T-SQLでレコードがNULLの場合に文字列を置き換える方法

さまざまな顧客のさまざまなステータスにあるアカウントの数を示す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を学んでいるので、これは簡単に答えられる質問かもしれません。

10
dvanaria

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はどちらも希望どおりに機能します。

22
Martin Smith

ISNULL('value', 'replacewithvalue')を使用することもできます

0
Praneeth
SELECT
   sr.sales_region_name   AS SalesRegion
   , ISNULL(micv.value,'Pending')
   , COUNT(sr.sales_region_name)
FROM prospect p
--(...)

詳細については、 [〜#〜] isnull [〜#〜] を確認してください。

0
apacay