반응형
열 이름으로 피벗 해제
자리가 있습니다StudentMarks
열이 있는Name, Maths, Science, English
데이터는 다음과 같습니다.
Name, Maths, Science, English
Tilak, 90, 40, 60
Raj, 30, 20, 10
저는 다음과 같이 정리하고 싶습니다.
Name, Subject, Marks
Tilak, Maths, 90
Tilak, Science, 40
Tilak, English, 60
unpivot을 사용하면 Name, Marks를 제대로 가져올 수 있지만 소스 테이블의 열로 가져올 수 없습니다.Subject
열을 선택합니다.
어떻게 하면 이를 달성할 수 있을까요?
지금까지 다음 쿼리에 도달했습니다(이름, 마크를 얻기 위해).
select Name, Marks from studentmarks
Unpivot
(
Marks for details in (Maths, Science, English)
) as UnPvt
당신의 질문이 매우 가깝습니다.다음을 포함하여 다음을 사용할 수 있어야 합니다.subject
최종 선택 목록에서:
select u.name, u.subject, u.marks
from student s
unpivot
(
marks
for subject in (Maths, Science, English)
) u;
SQL Fiddle with 데모 참조
다음 코드를 가진 일련의 논리를 사용하여 표준 sql un-pivoting 방법을 시도할 수도 있습니다.다음 코드는 3단계로 구성되어 있습니다.
- 교차 결합을 사용하여 각 행에 대해 여러 복사본 만들기(이 경우 제목 열도 만들기)
- 열 "마크"를 만들고 사례 표현식을 사용하여 관련 값을 입력합니다(예: 주제가 과학이면 과학 열에서 값을 선택합니다).
null 조합 제거(존재하는 경우 기본 테이블에 null 값이 없는 경우 테이블 식을 완전히 피할 수 있음)
select * from ( select name, subject, case subject when 'Maths' then maths when 'Science' then science when 'English' then english end as Marks from studentmarks Cross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject) )as D where marks is not null;
교차 결합을 사용하는 또 다른 방법은 교차 결합 내부의 열 이름을 지정하는 것입니다.
select name, Subject, Marks
from studentmarks
Cross Apply (
values (Maths,'Maths'),(Science,'Science'),(English,'English')
) un(Marks, Subject)
where marks is not null;
언급URL : https://stackoverflow.com/questions/19055902/unpivot-with-column-name
반응형
'code' 카테고리의 다른 글
가치가 있다는 것을 알고 있다는 것을 의미하기 때문에 "암시적으로 포장되지 않은 옵션"을 만들어야 하는 이유는 무엇입니까? (0) | 2023.04.28 |
---|---|
bash를 사용하면 표준 오류를 다른 프로세스에 파이프로 연결하려면 어떻게 해야 합니까? (0) | 2023.04.28 |
매트 테이블 정렬 데모가 작동하지 않음 (0) | 2023.04.28 |
Swift에서 메일 앱을 여는 방법 (0) | 2023.04.23 |
Swift - 절대값으로 변환 (0) | 2023.04.23 |