2011-03-08 4 views
0

저장된 proc에서 계산 된 필드를 만들려고합니다. 나는 projectID 열과 영향을받는 영역에 해당하는 '예'또는 '아니오'값이있는 3 개의 열이 있습니다. 모든 '예'값을 수집하고 해당 지역의 이름을 RegionImpacted이라는 새 필드에 삽입해야합니다. 여러 지역에 영향을 줄 수 있습니다.다른 3 개의 필드에서 계산 된 필드 T-SQL

+0

당신이 여러 영역이 영향을받는 때 하나의 컬럼에 삽입 할 것인가? –

+0

당신이 지금까지 가지고있는 것을 말해주십시오. 두개의 테이블과 컬럼이 좋을 것입니다. – DefyGravity

+0

지역은 APAC, LATAM 및 EMEA입니다. 예를 사용하여 열 이름을 새 필드로 가져와야합니다. Projects라는 테이블 ... 프로젝트 ID가 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 예. 업데이트 된 답변. –