2011-06-14 2 views
-6
INSERT INTO 
denormalizedTable 

SELECT 
table1.userName, 
MAX(CASE WHEN table2.Type = 1 THEN table2.Question END) AS question_1, 
MAX(CASE WHEN table2.Type = 1 THEN table2.Answer END) AS answer_1, 
MAX(CASE WHEN table2.Type = 2 THEN table2.Question END) AS question_2, 
MAX(CASE WHEN table2.Type = 2 THEN table2.Answer END) AS answer_2, 
MAX(CASE WHEN table2.Type = 3 THEN table2.Question END) AS question_3, 
MAX(CASE WHEN table2.Type = 3 THEN table2.Answer END) AS answer_3, 
MAX(CASE WHEN table2.Type = 4 THEN table2.Question END) AS question_4, 
MAX(CASE WHEN table2.Type = 4 THEN table2.Answer END) AS answer_4, 
MAX(CASE WHEN table2.Type = 5 THEN table2.Question END) AS question_5, 
MAX(CASE WHEN table2.Type = 5 THEN table2.Answer END) AS answer_5, 
MAX(CASE WHEN table2.Type = 6 THEN table2.Question END) AS question_6, 
MAX(CASE WHEN table2.Type = 6 THEN table2.Answer END) AS answer_6, 
MAX(CASE WHEN table2.Type = 7 THEN table2.Question END) AS question_7, 
MAX(CASE WHEN table2.Type = 7 THEN table2.Answer END) AS answer_7, 
MAX(CASE WHEN table2.Type = 8 THEN table2.Question END) AS question_8, 
MAX(CASE WHEN table2.Type = 8 THEN table2.Answer END) AS answer_8 

FROM 
table1 
JOIN 
table2 
ON 
table1.userID = table2.userID 

GROUP BY table1.userName 
+2

유지 관리해야하는 새 테이블 대신 인덱싱 된 뷰로 간주 했습니까? http://technet.microsoft.com/en-us/library/cc917717.aspx –

+0

어떤 정규형이 'denormalizedTable'에 있다고 가정합니까? – onedaywhen

답변

2

SQL에서 'PIVOT'작업을 수행하고 있습니다. 실제로 할 수있는 더 좋은 방법은 없으므로 실제로 더 나아질 수는 없습니다.

아마도 userName 대신 table1.userID를 GROUP BY 할 수 있습니다!

질문 : 왜 그런 검색어가 필요합니까?

클라이언트에 대한보기에서 결과를 리턴하기위한 조회를 수행하는 경우, 피벗 조작은 DAL이 아닌보기의 작업이어야합니다.

답변을 드릴 때 좀 더 상황이 필요합니다!

+0

이것은 답변이 아닙니다. 왜이 문서를 투표에 올렸고 누가이 주석을 삭제 했습니까? – JohnCoSystem