데이터를 언 피 보트 (unpivot)하려는 것 같습니다. 이 작업은 SQL Server의 버전에 따라 여러 가지 방법으로 수행 할 수 있습니다. 당신은 SQL 서버 2005 +를 사용하는 경우
, 당신은 행에 열을 변환 UNPIVOT 기능을 사용할 수 있습니다 : 당신이 SQL 서버 2008+를 사용하는 경우
select userid, questionid, answer
from yourtable
unpivot
(
answer
for questionId in (QuestionId1, QuestionId2)
) unpiv;
, 당신은 UNPIVOT 기능을 사용할 수 있지만 당신은 당신이 행으로 변환 할 필요가 열 알 수없는 번호가 있다면, 당신은을 얻기 위해 동적 SQL을 사용할 수
select t.userid, c.questionid, c.answer
from yourtable t
cross apply
(
values
('QuestionId1', QuestionId1),
('QuestionId2', QuestionId2),
...
) c (questionId, answer);
을 : 당신은 또한 CROSS이 적용 사용할 수 있습니다 및 값은 행 열에서 데이터를 변환하는 검색 결과 :
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot = stuff((select ','+quotename(C.name)
from sys.columns as C
where C.object_id = object_id('yourtable') and
C.name != 'userid'
for xml path('')), 1, 1, '')
set @query
= 'select userid, questionid, answer
from yourtable
unpivot
(
answer
for questionid in ('+ @colsunpivot +')
) u'
exec(@query);
이 변환 유형을 수행 할 때 행으로 변환되는 열의 데이터는 동일한 데이터 유형이어야합니다. Question1 및 Question2 다른 데이터 유형 인 경우 예를 들어, 당신은이에 UNPIVOT 유사한하기 전에 변환해야합니다 :
select userid, questionid, answer
from
(
select userid,
cast(questionid1 as varchar(10)) questionid1,
cast(questionid2 as varchar(10)) questionid2
from yourtable
) src
unpivot
(
answer
for questionId in (QuestionId1, QuestionId2)
) unpiv;
당신은 MSSQL 2005 또는 더 높은 UNPIVOT 사용할 수 있습니다
아직 피벗 쿼리로 쓰려고 했습니까? – Limey
답변 가져 오기를 언급합니다. 벌써 해 봤니? 그렇지 않은 경우 데이터베이스로로드하기 전에 데이터를 조 변경하십시오. Excel과 같은 작업을 쉽게 수행 할 수 있습니다. – BellevueBob
이 시점까지 지금까지 내가 해왔지만 너무 많은 사용자가있어 사용자 ID를 답변에 할당하는 데 영원히 걸릴 것입니다. 필자는 피벗 테이블을 통해이를 수행하는 방법을 찾고 있었지만 아직 계층 구조를 제거 할 수는 없습니다. – user2187945