2011-10-31 4 views
0

다음 열이있는 레거시 테이블이 있습니다. 다음과 같이여러 열을 행으로 변환

Create Table test 
(id varchar(50) 
, code1 varchar(50) 
, codeDesc1 varchar(50) 
, code2 varchar(50) 
, codeDesc2 varchar(50) 
, code3 varchar(50) 
, codeDesc3 varchar(50) 
, code4 varchar(50) 
, codeDesc4 varchar(50) 
, code5 varchar(50) 
, codeDesc5 varchar(50) 
, code6 varchar(50) 
, codeDesc6 varchar(50) 
) 

insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6) 
values ('1','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code') 

insert into test (id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6) 
values ('2','100.1', 'first code','100.2', 'Second code','100.3', 'Third code','100.4', 'Fourth code','100.5', 'Fifth code','100.6', 'Sixth code') 

select * from test 

반환 :

id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6 

1,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code 

2,100.1, first code,100.2, Second code,100.3, Third code,100.4, Fourth code,100.5, Fifth code,100.6, Sixth code 

하지만 난 아래 그림과 같이 데이터를 다시 얻으려면 :

ID, Code, Description 

1, 100.1, First Code 
1, 100.2, Second Code 
1, 100.3, Third Code 
1, 100.4, Fourth Code 
1, 100.5, Fifth Code 
1, 100.6, Sixth Code 
2, 100.1, First Code 
2, 100.2, Second Code 
2, 100.3, Third Code 
2, 100.4, Fourth Code 
2, 100.5, Fifth Code 
2, 100.6, Sixth Code 

는 사람이 어떻게 그렇게 제발 도와 드릴까요?

나는 UNPIVOT을 시도했지만 정확한 결과를 제공하지 못했습니다. 여기에 사용 된 쿼리가 있지만 어려운 시간을 찾는 정확한 결과를 얻기 위해 조정해야합니다.

SELECT Id, FieldCode , FieldValue 
    FROM 
    (
     SELECT id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6 
     FROM test 
    ) MyTable 
    UNPIVOT 
    (FieldValue FOR FieldCode IN (code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6))AS MyUnPivot 

미리 도움을 주셔서 감사합니다.

+2

이것은 무엇입니까? SQL이나 뭐 그런가요? 적절하게 태그하십시오. –

+0

DB가 그런 식으로 출력되기를 원하십니까? 아니면 어떤 프로그래밍 언어가 그런 식으로 출력되기를 원합니 까? – user482594

+0

답변 해 주셔서 감사합니다. 네,이 정보를 가지고 다른 테이블을 업데이트해야하기 때문에 변환을 수행 할 쿼리가 필요합니다. 나는 커서를 사용할 수 있지만 커서가 마음에 들지 않는다는 것을 알고 있고 PIVOT/UNPIVOT 명령을 사용하여이를 수행하는 방법이 있지만 뭔가 보이지 않지만 보이지 않습니다. – Vincy

답변

1

Never Mind, 대답을 찾았습니다. 이제 트릭 부분을

SELECT Id, FieldCode, FieldValue 
    FROM 
    (
     SELECT id, code1, codeDesc1, code2, codeDesc2, code3, codeDesc3, code4, codeDesc4, code5, codeDesc5, code6, codeDesc6 
     FROM test 
    ) MyTable 

    UNPIVOT 
    (FieldCode FOR FieldCodes IN (code1, code2, code3, code4, code5, code6))AS CODE 

    UNPIVOT 
    (FieldValue FOR FieldValues IN (codeDesc1, codeDesc2, codeDesc3, codeDesc4, codeDesc5, codeDesc6))AS FieldValues 

WHERE RIGHT(FieldCodes,1) = RIGHT(FieldValues,1) 

을 보이는 사람이 올바른 결과를 얻을 경우 다시에 있음을, 그래서 내가 여기에 게시 :이 멋진 망갈의 웹 사이트 여기 http://mangalpardeshi.blogspot.com/2009/04/unpivot-multiple-columns.html

그리고이 덕분에 내 문제를 해결 내 쿼리입니다 끝에있는 WHERE 절은 사용 된 컬럼 이름에 따라 달라집니다. 따라서 코드를 사용하기 전에 코드를 이해해야합니다.

또한 원본 열을 반환하는 초기 쿼리에서 ISNULL을 확인하는 것이 좋습니다. UNPIVOT 모드에있게되면 변경 사항이 없으므로 오류가 발생할 수 있습니다.

행운을 빌어 요!

관련 문제