2013-11-14 7 views
1

여기 내 문제가 있습니다. Microsoft SQL Server 데이터베이스 테이블에 여러 개의 열이 있습니다. (I이 테이블의 데이터 구조를 변경할 수!) 열하나의 열에서 값을 찾고 다른 열에서 값을 반환해야합니다.

  • 21이 표에서 '실제'방치 '상대'방치이 테이블의 열
  • 21 크기
  • 크기 실제 크기 열은 열 번호를 통해 상대 크기 열을 통해 해당합니다.
    는 : 입력 된 '실제'값에 기초

I 필요 (예를 ActualColumn1는 RelativeColumn1ActualColumn2 21까지 RelativeColumn2, 에 ActualColumnX RelativeColumnX에 대응 대응) 관련 '상대'값을 반환합니다.

다음 사례 문과 함께 필요한 부분을 관리했지만 case 문은 최대 10 개의 조건을 가지고 있으므로 내 테이블의 21 개 열을 모두 포함 할 수 없습니다. 이 문제에 접근하는 가장 좋은 방법은 무엇입니까? 내 목표는 select 문에 이것을 넣어서 상대 크기를 선택하고 내 쿼리에서 반환 할 수 있도록하는 것입니다. 나는 case 문 무슨 짓을했는지의

예 :

SELECT 
    T.AValue 
    CASE WHEN (T.ActualColumn1 = T.AValue) then T.RelativeColumn1 ELSE 
     CASE WHEN (T.ActualColumn2 = T.AValue) THEN T.RelativeColumn2 ELSE 
      CASE WHEN (T.ActualColumn3 = T.AValue) THEN T.RelativeColumn3 ELSE 
       CASE WHEN (T.ActualColumn4 = T.AValue) THEN T.RelativeColumn4 ELSE 
        NULL 
       END 
      END 
     END 
    END AS RValue 
FROM T 

여러분의 도움에 감사드립니다!

+0

당신은 CASE'로 둥지 case 문에 같은 뭔가가 필요하지 않을 때 (table.ActualColumn1 =을 aValue) THEN table.RelativeColumn1 CASE를 언제 (table.ActualColumn2 =을 aValue) THEN table.RelativeColumn2 ... ELSE NULL End RValue'는 시작하기가 더 쉽습니다. :-) – talegna

답변

3

사례 명세서를 검색된 사례로 변경하는 경우 절 수가 10 개를 초과 할 수 있습니다.

select T.AValue, 
     case T.AValue 
     when T.ActualColumn1 then T.RelativeColumn1 
     when T.ActualColumn2 then T.RelativeColumn2 
     when T.ActualColumn3 then T.RelativeColumn3 
     when T.ActualColumn4 then T.RelativeColumn4 
     end as RValue 
from T 
+0

고마워, 나는 그것을 알아 냈다. 네가 자리하고있어. – Chris1804505

관련 문제