2011-03-08 96 views
0

我試圖在我的存儲過程中創建一個計算的字段。我有一個projectID列和3列,其中對應於受影響區域的「是」或「否」值。我必須收集所有「是」值,並將相應區域的名稱插入名爲RegionImpacted的新字段。可能有多個區域受到影響。從3個其他字段計算的字段T-SQL

+0

你想插入到單個列在多個區域的影響是什麼? –

+0

告訴我們你到目前爲止的情況......一對夫婦的桌子和柱子會很好。 – DefyGravity

+0

這些地區是亞太地區,拉丁美洲和歐洲,中東和非洲地區。我必須在新字段中帶一個是的列名。它有一張名爲Projects的表格..它有4個帶有projectID的列,這三個區域有yes或no ..我必須用區域的名稱做一個第四個字段.. – Avinash

回答

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   
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」incase所有區域都說不。 – Avinash

+0

@Avinash是的。更新了答案。 –