Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

PIVOT का उपयोग करके कॉलम मानों को कॉलम के रूप में चुनें

आपकी आवश्यकताएं पूरी तरह से स्पष्ट नहीं हैं लेकिन ऐसा लगता है कि आप 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) |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. संख्याओं की श्रेणी के साथ अस्थायी तालिका बनाएं

  2. SQL सर्वर में Msg 8114 "डेटा प्रकार varchar को संख्यात्मक में बदलने में त्रुटि" को ठीक करें

  3. अद्यतन विवरण से प्रभावित पंक्तियों की वापसी संख्या

  4. निर्दिष्ट स्कीमा मान्य नहीं है। त्रुटियाँ:नाम के साथ अनेक प्रकार

  5. SQL सर्वर में हटाए गए डेटाबेस को ट्रैक करने के तरीके