Tsql 根据T-SQL的其他3个字段计算出的字段
我正在尝试在存储过程中创建一个计算字段。我有一个Tsql 根据T-SQL的其他3个字段计算出的字段,tsql,calculated-field,Tsql,Calculated Field,我正在尝试在存储过程中创建一个计算字段。我有一个projectID列和3个列,其中包含与受影响区域对应的“是”或“否”值。我必须收集所有“是”值,并将相应区域的名称插入名为RegionImpacted的新字段中。可能有多个区域受到影响 听起来您需要以下内容。您需要将其格式化为您的列以及您希望它显示的内容 case when [apac]='YES' then case when [latam]='YES' then case when [eme
projectID
列和3个列,其中包含与受影响区域对应的“是”或“否”值。我必须收集所有“是”值,并将相应区域的名称插入名为RegionImpacted
的新字段中。可能有多个区域受到影响 听起来您需要以下内容。您需要将其格式化为您的列以及您希望它显示的内容
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
正如其他人所建议的那样,嵌套的case语句将起作用,但如果需要添加其他区域,它们会变得非常复杂,因为它们的复杂度呈指数级增长。在执行嵌套的case语句解决方案之前,考虑6个区域的外观。我更喜欢连接case语句的方法
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
如果我理解正确的话
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
当多个区域受到影响时,您希望在单列中插入什么内容?请告诉我们到目前为止您有什么。。。几张表格和几列就好了。这些地区是亚太地区、拉丁美洲和欧洲、中东和非洲。。我必须将带有“是”的列名带到新字段中。这是一张叫做项目的表格。。它有4列带有projectd,这三个区域带有yes或no。。我必须在第四个字段中用yes表示区域名称。@Avinash yes。更新答案。