0

我正在尝试在我的存储过程中创建一个计算字段。我有一projectID列和 3 列,其中包含与受影响区域相对应的“是”或“否”值。我必须收集所有“是”值并将相应区域的名称插入一个名为RegionImpacted. 可能有多个区域受到影响。

4

3 回答 3

0

听起来您需要以下内容。您需要将其格式化为您的列以及您希望它显示的内容。

case when [apac]='YES' then 
        case when [latam]='YES' then 
                case when [emea]='YES' then 'A/L/E' 
                else 'A/L' end 
        else 
                case when [emea]='YES' then 'A/E' 
                else 'A' end 
        end 
else 
        case when [latam]='YES' then 
                case when [emea]='YES' then 'L/E' 
                else 'L' end 
        else 
                case when [emea]='YES' then 'E' 
                else 'NONE' end 
        end 
end
于 2011-03-08T16:14:58.800 回答
0

其他人建议的嵌套案例语句将起作用,但如果您需要添加其他区域,它们会很快变得非常复杂,因为它们的复杂性呈指数级增长。例如,在实施嵌套案例语句解决方案之前,请考虑使用 6 个区域时它们的外观。我更喜欢串联的案例陈述方法。

DECLARE @Region1 CHAR(3)
, @Region2 CHAR(3)
, @Region3 CHAR(3)
, @Result VARCHAR(128)

SET @Region1 = ' NO'
SET @Region2 = ' NO'
SET @Region3 = ' NO'

SELECT  Regions = CASE WHEN ( @Region1 = ' NO'
                                        AND @Region2 = ' NO'
                                        AND @Region3 = ' NO'
                                     ) THEN 'None'
                        ELSE CASE @Region1
                                WHEN 'YES' THEN 'Region1 '
                                ELSE ''
                            END 
                            + CASE @Region2
                                WHEN 'YES' THEN 'Region2 '
                                ELSE ''
                            END 
                            + CASE @Region3
                                WHEN 'YES' THEN 'Region3 '
                                ELSE ''
                            END
                        END         
于 2011-03-08T16:20:43.430 回答
0

如果我理解正确

declare @T table (ID int, APAC varchar(3), LATAM varchar(3), EMEA varchar(3))

insert into @T values 
(1, 'No',  'No',  'No'),
(2, 'Yes', 'No',  'No'),
(3, 'No',  'Yes', 'Yes'),
(4, 'Yes', 'Yes', 'Yes')

select 
  ID,
  APAC,
  LATAM,
  EMEA,
  coalesce(stuff(
      case when APAC = 'Yes' then ',APAC' else '' end +
      case when LATAM = 'Yes' then ',LATAM' else '' end +
      case when EMEA = 'Yes' then ',EMEA' else '' end,
    1, 1, ''), 'none') as RegionNames
from @T  

结果

ID          APAC LATAM EMEA RegionNames
----------- ---- ----- ---- ----------------
1           No   No    No   none
2           Yes  No    No   APAC
3           No   Yes   Yes  LATAM,EMEA
4           Yes  Yes   Yes  APAC,LATAM,EMEA
于 2011-03-08T17:43:46.147 回答