आप डेटा पिवट करना चाहते हैं - स्तंभ डेटा को पंक्तियों में बदलें। पुराने स्कूल का तरीका CASE कथन - SQL सर्वर 2005 के अनुसार आप का उपयोग कर सकते हैं धुरी आज्ञा। PIVOT उदाहरण प्रदान करने के लिए मैं इसे किसी और पर छोड़ दूँगा।
SELECT t.memberid,
CASE WHEN t.questionno = 1 THEN t.answerno ELSE NULL END AS 1,
CASE WHEN t.questionno = 2.1 THEN t.answerno ELSE NULL END AS 2.1,
CASE WHEN t.questionno = 2.2 THEN t.answerno ELSE NULL END AS 2.2,
CASE WHEN t.questionno = 3 THEN t.answerno ELSE NULL END AS 3
CASE WHEN t.questionno = 5 THEN t.answerno ELSE NULL END AS 5
CASE WHEN t.questionno = 7 THEN t.answerno ELSE NULL END AS 7
FROM ANSWER t
यह मेरे लिए स्पष्ट नहीं है कि प्रश्न कॉलम का डेटा प्रकार क्या है, यदि आवश्यक हो तो उसके अनुरूप अपडेट करें।
यदि उपयोगकर्ता अपने स्वयं के प्रश्नों को परिभाषित कर सकते हैं, तो आपको गतिशील SQL का उपयोग करना होगा . आपको पहले प्रश्नावली की एक सूची प्राप्त करनी होगी, और फिर उन परिणामों के आधार पर CASE कथनों का निर्माण करना होगा। इसी तरह पिवोट के लिए...
DECLARE @SQL nvarchar(4000)
DECLARE @questionno [data type here]
SET @SQL = 'SELECT t.memberid,'
DECLARE c1 CURSOR READ_ONLY FOR
SELECT t.questionno
FROM ANSWER t
GROUP BY t.questionno
ORDER BY t.questionno
OPEN c1
FETCH NEXT FROM c1 INTO @questionno
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @SQL + ' CASE WHEN t.questionno = '+ @questionno +' THEN t.answerno ELSE NULL END AS '+ @questionno','
FETCH NEXT FROM c1 INTO @questionno
END
CLOSE c1
DEALLOCATE c1
SET @SQL = @SQL + 'NULL FROM ANSWER t '
EXEC(@SQL)
NULL FROM
... ऐसा इसलिए है क्योंकि मैं पिछले CASE कथन से आने वाले अल्पविराम से छुटकारा पाने के लिए बहुत आलसी हूं।