이것은 참가자를위한 설문지가 포함 된 데이터베이스를 가지고있는 연구 데이터베이스입니다. 이 설문지는 연구에서 3 번 참가자에게 요청됩니다 (P1 / P2 / P3).
설문지의 테이블 구조
설문지 1.
+--+-------+--------+--+--+--+--+--+---
|PK|Part_ID|Phase_Id|Q1|q2|q3|q4|q5|...
+--+-------+--------+--+--+--+--+--+---
|1 |A010 |P1 |1 |0 |1 |0 |1 |...
+--+-------+--------+--+--+--+--+--+---
|2 |A010 |P2 |0 |1 |0 |1 |0 |...
+--+-------+--------+--+--+--+--+--+---
|3 |A010 |P3 |1 |0 |1 |0 |1 |...
+--+-------+--------+--+--+--+--+--+---
각 참가자에 대해 등등.
모든 참가자는 최대 3 단계를 가지며 더 적을 수 있습니다. 테이블 구조로 인해 열 수는 항상 동일합니다.
연구원은 분석 프로그램 (SPSS)에 입력하기 위해 모든 데이터를 한 줄로 가져 오려고합니다. 따라서 출력 구조는 다음과 같아야합니다.
+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Part_ID|P1_Q1|P1_q2|P1_q3|P1_q4|P1_q5|P2_Q1|P2_q2|P2_q3|P2_q4|P2_q5|P3_Q1|P3_q2|P3_q3|P3_q4|P3_q5|
+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|A010 |1 |0 |1 |0 |1 |0 |1 |0 |1 |0 |1 |0 |1 |0 |1 |
+-------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
SQL Server 2008 Express 사용.
몇 가지 피벗 및 언 피벗 예제를 살펴 보았지만 올바른 방법이라고 생각하지 않습니다 (집계가 필요하지 않음).
그래서 어떤 포인터라도 좋을 것입니다.
문안 인사
Roger (데모 형식이 제대로 나오기를 바랍니다).
당신은 UPIVOT
당신의 테이블을 먼저 할 수 있고 PIVOT
다시 할 수 있습니다.
SELECT Part_Id,
P1_Q1, P1_Q2, P1_Q3, P1_Q4, P1_Q5,
P2_Q1, P2_Q2, P2_Q3, P2_Q4, P2_Q5,
P3_Q1, P3_Q2, P3_Q3, P3_Q4, P3_Q5
FROM
(
SELECT Part_ID, Phase_Id + '_' + Question Question, Value
FROM
(
SELECT Part_ID, Phase_Id, q1, q2, q3, q4, q5
FROM Table1
) s
UNPIVOT
(
Value FOR Question IN (q1, q2, q3, q4, q5)
) u
) s
PIVOT
(
MAX(Value) FOR Question IN
(
P1_Q1, P1_Q2, P1_Q3, P1_Q4, P1_Q5,
P2_Q1, P2_Q2, P2_Q3, P2_Q4, P2_Q5,
P3_Q1, P3_Q2, P3_Q3, P3_Q4, P3_Q5
)
) p
또는 조건부 집계를 사용하여
SELECT Part_Id,
MAX(CASE WHEN Phase_id = 'P1' THEN Q1 END) P1_Q1,
MAX(CASE WHEN Phase_id = 'P1' THEN Q2 END) P1_Q2,
MAX(CASE WHEN Phase_id = 'P1' THEN Q3 END) P1_Q3,
MAX(CASE WHEN Phase_id = 'P1' THEN Q4 END) P1_Q4,
MAX(CASE WHEN Phase_id = 'P1' THEN Q5 END) P1_Q5,
MAX(CASE WHEN Phase_id = 'P2' THEN Q1 END) P2_Q1,
MAX(CASE WHEN Phase_id = 'P2' THEN Q2 END) P2_Q2,
MAX(CASE WHEN Phase_id = 'P2' THEN Q3 END) P2_Q3,
MAX(CASE WHEN Phase_id = 'P2' THEN Q4 END) P2_Q4,
MAX(CASE WHEN Phase_id = 'P2' THEN Q5 END) P2_Q5,
MAX(CASE WHEN Phase_id = 'P3' THEN Q1 END) P3_Q1,
MAX(CASE WHEN Phase_id = 'P3' THEN Q2 END) P3_Q2,
MAX(CASE WHEN Phase_id = 'P3' THEN Q3 END) P3_Q3,
MAX(CASE WHEN Phase_id = 'P3' THEN Q4 END) P3_Q4,
MAX(CASE WHEN Phase_id = 'P3' THEN Q5 END) P3_Q5
FROM Table1
GROUP BY Part_Id;
산출:
| PART_ID | P1_Q1 | P1_Q2 | P1_Q3 | P1_Q4 | P1_Q5 | P2_Q1 | P2_Q2 | P2_Q3 | P2_Q4 | P2_Q5 | P3_Q1 | P3_Q2 | P3_Q3 | P3_Q4 | P3_Q5 | | --------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |- ------ | ------- | ------- | ------- | | A010 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
다음은 SQLFiddle 데모입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다