ストアド プロシージャで計算フィールドを作成しようとしています。影響を受ける地域に対応する「はい」または「いいえ」の値を持つprojectID
列と 3 つの列があります。すべての「はい」の値を収集し、対応する地域の名前を という新しいフィールドに挿入する必要がありますRegionImpacted
。複数の地域が影響を受ける可能性があります。
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
他の人が提案したネストされたケースステートメントは機能しますが、複雑さが指数関数的に増加するため、追加の領域を追加する必要がある場合、非常に急速に複雑になります。ネストされた case ステートメント ソリューションを実装する前に、たとえば 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 に答える