我有针对更改请求数据库运行以下SQL代码。每个记录具有表示影响了美国地区的多个列。如果改变影响的区域中的值将是1否则为NULL。

所以我加入每一列中的值,以确定是否一个以上的区域受到影响,答案将是大于1。

我需要如何做出改变我的COALESCE和/或CASE语句显示有值1,所有受影响地区的帮助,在“Affected_Area”输出。

<强>受影响区域最近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)))

任何帮助理解!

汉克Stallings的

有帮助吗?

解决方案

尝试是这样的:

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)))    

你可能会需要修剪尾随逗号。

其他提示

你有任何改变这种表的设计能力?看来不到正确的 - 你会用一个FK区域柱更好的区域表。你会与上面做,如果你要添加其他区域...

如果你不这样做,你可能想使用转动命令,并创建一个更加标准化的观点,然后你可以用它来查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top