2011-03-08 11 views
0

私はストアドプロシージャに計算フィールドを作成しようとしています。私はprojectIDの列と、影響を受けた領域に対応する 'はい'または 'いいえ'の値を持つ3列を持っています。私はすべての 'yes'の値を収集し、対応する領域の名前をRegionImpactedという新しいフィールドに挿入する必要があります。影響を受ける地域は複数ある可能性があります。他の3つのフィールドから計算されたフィールドT-SQL

+0

あなたが複数の領域が影響を受けているときには、単一の列に挿入するのでしょうか? –

+0

あなたがこれまでに持っているものを教えてください...カップルのテーブルとカラムは良いでしょう。 – DefyGravity

+0

地域はAPAC、LATAM、EMEAです。新しいフィールドにはいを付けて列名を取得する必要があります。 Projectsと呼ばれるテーブルです。プロジェクトIDは4列あり、これらの3つの領域は「はい」または「いいえ」です。はいを付けて領域の名前を持つ4番目のフィールドを作成する必要があります。 – Avinash

答えて

0

入れ子になった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   
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 
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 
+0

しかし、表示する方法はありますか"none"すべての地域がNoと答えた場合。 – Avinash

+0

@Avinashはい。更新された答え。 –

関連する問題