आपकी आवश्यकताएं पूरी तरह से स्पष्ट नहीं हैं लेकिन ऐसा लगता है कि आप c
. नामक एक नया कॉलम बनाने का प्रयास कर रहे हैं उसके बाद एक row_number()
. के साथ इसके साथ संबद्ध -- c1, c2 c3, etc
।
यदि आप अपनी सबक्वेरी में निम्नलिखित का उपयोग करते हैं:
SELECT Val1, Val2,
'C'+ cast(row_number() over(partition by Val2
order by val1) as varchar(10)) col
FROM TEMP1
देखें SQL Fiddle with Demo
आपको परिणाम मिलेगा:
| VAL1 | VAL2 | COL |
----------------------
| S01 | 00731 | C1 |
| S02 | 00731 | C2 |
| S03 | 00731 | C3 |
| S04 | 00731 | C4 |
| S05 | 00731 | C5 |
| S06 | 00731 | C6 |
| S07 | 00731 | C7 |
| S07 | 00731 | C8 |
| S08 | 00731 | C9 |
| S09 | 00731 | C10 |
| S04 | 00741 | C1 |
| S01 | 00746 | C1 |
| S01 | 00770 | C1 |
| S01 | 00771 | C1 |
| S02 | 00771 | C2 |
जो परिणाम प्रतीत होता है कि आप तब PIVOT
. करना चाहते हैं . फिर आप PIVOT
. लागू करेंगे इसका उपयोग करने के लिए:
SELECT Val2,
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10
FROM
(
SELECT Val1, Val2,
'C'+ cast(row_number() over(partition by Val2
order by val1) as varchar(10)) col
FROM TEMP1
) src
PIVOT
(
MAX(Val1)
FOR col IN (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)
) piv;
देखें SQL Fiddle with Demo . आपका अंतिम परिणाम तब है:
| VAL2 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 |
------------------------------------------------------------------------------------------------
| 00731 | S01 | S02 | S03 | S04 | S05 | S06 | S07 | S07 | S08 | S09 |
| 00741 | S04 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00746 | S01 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00770 | S01 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00771 | S01 | S02 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
नोट:मेरे परिणाम वांछित परिणाम के रूप में आप जो अनुरोध कर रहे हैं उससे थोड़ा अलग हैं क्योंकि मैं ORDER BY val1
कर रहा हूं। जो S07
. का कारण बनता है मूल्यों को एक साथ समूहीकृत किया जाना है।
डेटाबेस में डेटा का कोई क्रम नहीं है जब तक कि आप एक अनुरोध नहीं करते हैं, इसलिए इस बात की कोई गारंटी नहीं है कि S07
में से कोई एक है मान C10
. के रूप में दिखाई देंगे . आप परिणाम प्राप्त करने के लिए निम्नलिखित का उपयोग कर सकते हैं लेकिन इसकी कोई गारंटी नहीं है कि परिणाम हमेशा सही क्रम में होगा:
SELECT Val2,
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10
FROM
(
SELECT Val1, Val2,
'C'+ cast(row_number() over(partition by Val2
order by (select 1)) as varchar(10)) col
FROM TEMP1
) src
PIVOT
(
MAX(Val1)
FOR col IN (C1, C2, C3, C4, C5, C6, C7, C8, C9, C10)
) piv;
देखें SQL Fiddle with Demo
. order by (select 1)
डेटा के क्रम को बदल देता है लेकिन यह गारंटी नहीं देता कि यह हमेशा उसी क्रम में रहेगा। नतीजा यह है:
| VAL2 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | C9 | C10 |
------------------------------------------------------------------------------------------------
| 00731 | S01 | S02 | S03 | S04 | S05 | S06 | S07 | S08 | S09 | S07 |
| 00741 | S04 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00746 | S01 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00770 | S01 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |
| 00771 | S01 | S02 | (null) | (null) | (null) | (null) | (null) | (null) | (null) | (null) |