मेरे पास एक टेबल है जो नीचे दी गई टेबल की तरह दिखती है। इस तालिका में छात्रों के बारे में जानकारी और कुछ बहुविकल्पीय प्रश्नों के उनके उत्तर हैं। विचार करें कि प्रत्येक परीक्षा में प्रश्नों की संख्या भिन्न हो सकती है।

+--------+---------------+-------------+
| Person | QuestionIndex | ChoiceIndex |
+--------+---------------+-------------+
| John   |             1 |          01 |
| John   |             2 |          02 |
| John   |             3 |          04 |
| Peter  |             1 |          01 |
| Peter  |             2 |          03 |
| Peter  |             3 |          04 |
| Jack   |             1 |          01 |
| Jack   |             2 |          02 |
| Jack   |             3 |          03 |
+--------+---------------+-------------+

अब, मैं इस तरह के लेआउट में पिवट का उपयोग करके पंक्तियों को कॉलम में बदलना चाहता हूं:

+--------+----+----+----+
| Person | Q1 | Q2 | Q3 |
+--------+----+----+----+
| John   | 01 | 02 | 04 |
| Peter  | 01 | 03 | 04 |
| Jack   | 01 | 02 | 03 |
+--------+----+----+----+

कौन से कॉलम प्रश्न अनुक्रमणिका हैं। और प्रत्येक फ़ील्ड बहुविकल्पीय परीक्षा में उस प्रश्न के लिए उपयोगकर्ता की पसंद रखती है।

मैं इसे पिवट का उपयोग करके करना चाहता हूं। क्या कोई ऐसा करने में मदद कर सकता है?

1
Shahram Akbarinasaji 7 मई 2018, 19:12

1 उत्तर

सबसे बढ़िया उत्तर

आप निम्न कोड की तरह PIVOT का उपयोग कर सकते हैं, मैंने 'cte_base' नामक एक सामान्य तालिका अभिव्यक्ति बनाई है जो समूह कॉलम, स्प्रेडिंग कॉलम और एग्रीगेशन कॉलम को अलग करती है। फिर मैंने सीटीई के डेटा पर PIVOT लागू किया है।

WITH cte_base AS(
SELECT Person,      --Grouping column
QuestionIndex,      --Spreading column
ChoiceIndex         --Aggregation column
FROM tablename)
SELECT person, 
[01] AS 'Q1',
[02] AS 'Q2',
[03] AS 'Q3'
FROM cte_base
PIVOT (MAX(ChoiceIndex) 
FOR QuestionIndex IN ([01],[02],[03]));
1
Aura 7 मई 2018, 19:20