복붙노트

[SQL] 열 이름 피벗 해제

SQL

열 이름 피벗 해제

나는 열 이름, 수학, 과학, 영어와 테이블 StudentMarks 있습니다. 데이터 같다

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으로 내가 원하는 결과 집합의 제목 열 소스 테이블의 열 이름을 얻을 수 제대로 마크,하지만 이름을 얻을 수 있어요.

이걸 어떻게 달성 할 수 있습니까?

지금까지 다음 쿼리에 도달했습니다 (이름을 얻기 위해, 마크)

select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)

) as UnPvt

해결법

  1. ==============================

    1.귀하의 질문은 매우 가까운 거리에 있습니다. 당신은 최종 선택 목록에서 주제를 포함하는 다음을 사용할 수 있어야합니다 :

    귀하의 질문은 매우 가까운 거리에 있습니다. 당신은 최종 선택 목록에서 주제를 포함하는 다음을 사용할 수 있어야합니다 :

    select u.name, u.subject, u.marks
    from student s
    unpivot
    (
      marks
      for subject in (Maths, Science, English)
    ) u;
    

    데모와 SQL 바이올린을 참조하십시오

  2. ==============================

    2.또한 다음 코드를 사용하여 논리의 시퀀스를 사용하여 표준 SQL 않은 피벗 방법을 시도 할 수 있습니다 .. 다음 코드는 3 단계가 있습니다 :

    또한 다음 코드를 사용하여 논리의 시퀀스를 사용하여 표준 SQL 않은 피벗 방법을 시도 할 수 있습니다 .. 다음 코드는 3 단계가 있습니다 :

  3. ==============================

    3.학생 SELECT * FROM

    학생 SELECT * FROM

    UNPIVOT ((수학, 과학, 영어)의 주제에 대한 마크);

  4. ==============================

    4.크로스 조인을 사용하여 주위에 또 다른 방법은 교차 가입 내부에 열 이름을 지정하는 것

    크로스 조인을 사용하여 주위에 또 다른 방법은 교차 가입 내부에 열 이름을 지정하는 것

    select name, Subject, Marks 
    from studentmarks
    Cross Join (
    values (Maths,'Maths'),(Science,'Science'),(English,'English')
    ) un(Marks, Subject)
    where marks is not null;
    
  5. from https://stackoverflow.com/questions/19055902/unpivot-with-column-name by cc-by-sa and MIT license