1

変更要求データベースに対して実行される次の SQL コードがあります。各レコードには、影響を受ける米国の地域を表す列がいくつかあります。変更が地域に影響する場合、値は 1 になり、それ以外の場合は NULL になります。

そのため、各列の値を追加して、複数の地域が影響を受けているかどうかを判断しています。答えは 1 より大きくなります。

「Affected_Area」出力で、値が 1 のすべての影響を受ける領域をリストするように、COALESCE および/または CASE ステートメントを変更する方法について助けが必要です。

影響を受けた地域 過去 7 日間


SELECT ID, 
(ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0)  + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)),
Affected_Area = COALESCE(
CASE WHEN [allregions]=1 THEN 'All Regions' ELSE NULL END,
CASE WHEN [midamerica]=1 THEN 'Mid-America' ELSE NULL END,
CASE WHEN [northcentral]=1 THEN 'North Central' ELSE NULL END,
CASE WHEN [northeast]=1 THEN 'Northeast' ELSE NULL END,
CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest' ELSE NULL END,
CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest' ELSE NULL END,
CASE WHEN [southeast]=1 THEN 'Southeast' ELSE NULL END
),
FROM [DB_Reporting].[dbo].change c with (nolock)
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110)))

どんな助けでも大歓迎です!

ハンク・ストーリングス

4

2 に答える 2

1

次のようなことを試してください:

SELECT ID, 
    (ISNULL(southeast,0) + ISNULL(allregions,0) + ISNULL(midamerica,0)  + ISNULL(northcentral,0) + ISNULL(northeast,0) + ISNULL(pacificnorthwest,0) + ISNULL(pacificsouthwest,0)),
    Affected_Area = 
        CASE WHEN [allregions]=1 THEN 'All Regions, ' ELSE '' END + 
        CASE WHEN [midamerica]=1 THEN 'Mid-America, ' ELSE '' END + 
        CASE WHEN [northcentral]=1 THEN 'North Central, ' ELSE '' END + 
        CASE WHEN [northeast]=1 THEN 'Northeast, ' ELSE '' END + 
        CASE WHEN [pacificnorthwest]=1 THEN 'Pacific Northwest, ' ELSE '' END + 
        CASE WHEN [pacificsouthwest]=1 THEN 'Pacific Southwest, ' ELSE '' END + 
        CASE WHEN [southeast]=1 THEN 'Southeast' ELSE '' END 
FROM [DB_Reporting].[dbo].change c with (nolock)
WHERE convert(varchar(10),([needed_by_date]),110) BETWEEN (DATEADD(DD,-7,CONVERT(VARCHAR(10),GetDATE(),110))) AND (DATEADD(DD,-1,CONVERT(VARCHAR(10),GetDATE(),110)))    

おそらく、末尾のコンマを削除する必要があります。

于 2010-03-11T12:37:57.067 に答える
0

このテーブルのデザインを変更する機能はありますか?正しくないようです。リージョンテーブルに対してFKをオフにしたリージョン列を使用した方がよいでしょう。別のリージョンを追加する必要がある場合は、上記をどうしますか...

そうでない場合は、PIVOTコマンドを使用して、クエリに使用できる、より正規化されたビューを作成することをお勧めします。

于 2010-03-11T12:53:15.993 に答える