2015-01-12 6 views
0

사용자 응답과 각 질문을 고유하게 식별하는 QuestionID라는 다른 열이 포함 된 ResponseText 열이 있습니다.1 열에서 여러 값 반환

| FName | LName | Ph Number | Email  | 
---------------------------------------------------- 
| Billson | Thorn | 0422949333 | [email protected]| 
:

| QuestionID | ResponseText | 
--------------------------------- 
|  32  |  Billson | <- First Name 
|  33  |  Thorn  | <- Last Name 
|  34  | 0422949333 | <- Ph Number 
|  35  | [email protected] | <- Email 


나는 (항상 마지막에 이름 등을 될 것입니다 QuestionID 33)이 같은 QuestionID에 따라 별도의 컬럼에서에서 responseText를 표시하려면 : 내가 함께 일하고 것은 이것이다

지금 당장은

SELECT dbo.ResponseInstance.ResponseText as 'FName' 
FROM dbo.ResponseInstance 
WHERE dbo.ResponseInstance.QuestionID = '32' 
UNION 
SELECT dbo.ResponseInstance.ResponseText as 'LName' 
FROM dbo.ResponseInstance 
WHERE dbo.ResponseInstance.QuestionID = '33' 
UNION 
SELECT dbo.ResponseInstance.ResponseText as 'Phone' 
FROM dbo.ResponseInstance 
WHERE dbo.ResponseInstance.QuestionID = '34' 
UNION 
SELECT dbo.ResponseInstance.ResponseText as 'Email' 
FROM dbo.ResponseInstance 
WHERE dbo.ResponseInstance.QuestionID = '35' 

그러나 FName이라는 열을 하나 반환합니다. 나는 가능한 일을하려고 노력하고 있습니까?

답변

-1

당신은 조건부 집계를 사용하여이 작업을 수행 할 수 있습니다

SELECT 
    FName = MAX(CASE WHEN QuestionID = 32 THEN ResponseText END), 
    LName = MAX(CASE WHEN QuestionID = 33 THEN ResponseText END), 
    [Ph Number] = MAX(CASE WHEN QuestionID = 34 THEN ResponseText END), 
    Email = MAX(CASE WHEN QuestionID = 35 THEN ResponseText END) 
FROM ResponseInstance 

편집 :

다음과 에릭의 의견에 따라, 당신은 질문에 대답하는 사람을 식별하는 열이 필요합니다. 예를 들어, ResponseInstancePersonID 열이 있다고 가정 해 봅시다.

샘플 데이터

CREATE TABLE ResponseInstance(
    PersonID INT, 
    QuestionID INT, 
    ResponseText VARCHAR(50), 
) 
INSERT INTO ResponseInstance VALUES 
(1, 32, 'Billson'), 
(1, 33, 'Thorn'), 
(1, 34, '0422949333'), 
(1, 35, '[email protected]'), 
(2, 32, 'John'), 
(2, 33, 'Doe'), 
(2, 34, '999999999'), 
(2, 35, '[email protected]') 

가 다시 당신은 여전히 ​​조건부 집계하지만,이 시간을 사용할 수 있습니다, 당신은 PersonID으로 그룹화 할 필요가있다. 당신이이 질문에 대답 한 사람 이상이있는 경우

SELECT 
    PersonID, 
    FName = MAX(CASE WHEN QuestionID = 32 THEN ResponseText END), 
    LName = MAX(CASE WHEN QuestionID = 33 THEN ResponseText END), 
    [Ph Number] = MAX(CASE WHEN QuestionID = 34 THEN ResponseText END), 
    Email = MAX(CASE WHEN QuestionID = 35 THEN ResponseText END) 
FROM ResponseInstance 
GROUP BY PersonID 

결과

PersonID FName  LName  Ph Number  Email 
--------- ------------ ----------- --------------- ---------------------- 
1   Billson  Thorn  0422949333  [email protected] 
2   John  Doe   999999999  [email protected] 
+0

, 어떻게 함께 같은 사람의 응답을 유지합니까? –

+0

@EricJ. 내가 게시 한 예제는 테이블의 축소 된 뷰입니다. 사람에 대한 모든 대답을 묶는 고유 한 식별자가 있습니다. – Mathemats

+0

@Mathemats 틀림없이 다른 디자인의 비명 소리가 들리 겠어. 다음 번에는 관련 정보를 모두 게시하십시오. –