[SQL] SQL Server 2008의 PIVOT을 사용하여
SQLSQL Server 2008의 PIVOT을 사용하여
하자 내가 SQL Server 2008의 테이블 또는 [표] -typed 변수 중 일부 데이터를 가지고 말 :
author_id review_id question_id answer_id
88540 99001 1 719
88540 99001 2 720
88540 99001 3 721
88540 99001 4 722
88540 99001 5 723
36414 24336 1 302
36414 24336 2 303
36414 24336 3 304
36414 24336 4 305
36414 24336 5 306
나는 결과 집합으로 데이터를 검색 할 것을 다음과 같다 :
author_id review_id 1 2 3 4 5
88540 99001 719 720 721 722 723
36414 24336 302 303 304 305 306
나는 PIVOT 연산자 내가 (이 게시물 어쨌든에 따라)해야 할 것입니다 생각,하지만 난 테이블에 question_id 행의 수는 달라질 수 있습니다 특히, 시작하는 방법을 알아낼 수 없습니다. 위의 예에서, 그것은 5,하지만 다른 쿼리 테이블 7 개 별개의 문제로 채울 수 있습니다.
해결법
-
==============================
1.사실, 당신은 클라이언트에서이 일을 더 나을 것입니다. 중간에 열 그룹에 author_id 및 REVIEW_ID 행 그룹, question_id으로, 첫 번째 결과 집합에 따라 데이터를 얻을 행렬을 사용하여 표시, 당신이보고 서비스를 사용한다고 가정하고, MAX (answer_id).
사실, 당신은 클라이언트에서이 일을 더 나을 것입니다. 중간에 열 그룹에 author_id 및 REVIEW_ID 행 그룹, question_id으로, 첫 번째 결과 집합에 따라 데이터를 얻을 행렬을 사용하여 표시, 당신이보고 서비스를 사용한다고 가정하고, MAX (answer_id).
쿼리는 가능 하죠,하지만 당신은 지금 동적 SQL이 필요한 것입니다.
... 뭔가 같은 :
DECLARE @QuestionList nvarchar(max); SELECT @QuestionList = STUFF( (SELECT ', ' + quotename(question_id) FROM YourTable GROUP BY question_id ORDER BY question_id FOR XML PATH('')) , 1, 2, ''); DECLARE @qry nvarchar(max); SET @qry = ' SELECT author_id, review_id, ' + @QuestionList + FROM (SELECT author_id, review_id, question_id, answer_id FROM YourTable ) PIVOT (MAX(AnswerID) FOR question_id IN (' + @QuestionList + ')) pvt ORDER BY author_id, review_id;'; exec sp_executesql @qry;
-
==============================
2.여기 좋은 예와 설명이있다.
여기 좋은 예와 설명이있다.
귀하의 경우는 다음과 같이 될 것이다 :
SELECT author_id, review_id, [1], [2], [3], [4], [5] FROM ( SELECT author_id, review_id, question_id, answer_id FROM the_table ) up PIVOT (MAX(answer_id) FOR question_id IN ([1],[2],[3],[4],[5])) AS pvt
-
==============================
3.
SELECT author_id, review_id, [1], [2], [3], [4], [5] FROM ( SELECT author_id, review_id, question_id, answer_id FROM the_table ) up PIVOT (MAX(answer_id) FOR
-
==============================
4.
select * from @t pivot ( max(answer_id) for question_id in ([1],[2],[3],[4],[5]) ) pivotT
목록 달라질 수있는 유일한 방법 ([1], [2], [3], [4], [5]) (동적으로) 문자열이 쿼리를 작성하고이를 실행하는 것이다.
-
==============================
5.이 답변을 참조하십시오
이 답변을 참조하십시오
기본적으로, 당신은 열을 얻을 수있는 데이터를 미리 검사하고 동적으로 동적 피벗 목록을 사용하여 SQL을 생성합니다. 수익을 원하는 세트의 열 정의가 고정되지 않기 때문에 더 비 동적 방법은 정말 없습니다.
from https://stackoverflow.com/questions/1677645/using-pivot-in-sql-server-2008 by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 기본 값으로 열을 추가합니다 - 2003 액세스 (0) | 2020.05.15 |
---|---|
[SQL] 쿼리 문자열을 사용하여 안드로이드의 SQLiteDatabase의 삽입 / 업데이트 / 삭제를 할 수있는 올바른 방법은 무엇입니까? (0) | 2020.05.15 |
[SQL] 필드의 DEFAULT 값을 선택하는 방법 (0) | 2020.05.15 |
[SQL] 절에 가변적 목록과 테이블에서 SELECT (0) | 2020.05.15 |
[SQL] SQL : 특정 열 ... 가능한 내에서 문자열을 사용하여 ORDER? (0) | 2020.05.15 |