SSMS
 sql >> डेटाबेस >  >> Database Tools >> SSMS

टी-एसक्यूएल में निश्चित कॉलम को जाने बिना पिवट कैसे करें

डीबी पर डेमो<>fiddle

आप ROW_NUMBER() मानों की संख्या को चिह्नित करने के लिए, जैसे:1, 2, 3

ध्यान दें कि :ORDER BY [Balance] DESC अपनी इच्छानुसार उत्पन्न मूल्य प्राप्त करने के लिए।

DECLARE 
    @columns NVARCHAR(MAX) = '',
    @sql     NVARCHAR(MAX) = '';


 SELECT Customer, Balance, Col = ROW_NUMBER() OVER (PARTITION BY Customer ORDER BY [Balance] DESC)
 into #b
 FROM #a

SELECT @columns += QUOTENAME(Col) + ','
from (SELECT DISTINCT Col FROM #b) A

-- remove the last comma
SET @columns = LEFT(@columns, LEN(@columns) - 1);


SET @sql = 'SELECT * FROM ( SELECT Customer, Balance, Col FROM  #b) src PIVOT( MAX([Balance]) FOR Col IN ('+ @columns +')) AS pivot_table;';

-- execute the dynamic SQL
EXECUTE sp_executesql @sql;

आउटपुट

अपडेट किया गया

सम्मिलित स्ट्रिंग्स के बाद से अदस्तावेजीकृत और अविश्वसनीय है . यह हमेशा अपेक्षा के अनुरूप काम नहीं करता है . तो आपको नीचे 2 समाधानों के साथ हल करना चाहिए

  1. STRING_AGG (एसक्यूएल सर्वर 2017 और देर से)
SELECT STRING_AGG(QUOTENAME(Col), ', ')
from (SELECT DISTINCT Col FROM #b) A
// Output: [1], [2], [3]
  1. उपयोग एक्सएमएल एक्सटेंशन
DECLARE  @columns NVARCHAR(MAX) = ''
SELECT @columns = (
  SELECT QUOTENAME(Col) + ', '
  FROM (SELECT DISTINCT Col FROM #b) A

  FOR XML PATH(''), TYPE
                   ).value('.','varchar(max)')
SELECT @columns 
// Output: [1], [2], [3],

धन्यवाद @ गैरेथडी की टिप्पणी। इसे db<>fiddle पर देखें।



  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. SQL Server 2008 R2 प्रबंधन स्टूडियो में सर्वर में लॉग इन करने में असमर्थ

  2. SQL सर्वर प्रबंधन स्टूडियो में परिणाम का स्कीमा देखें

  3. SQL सर्वर प्रबंधन स्टूडियो के इतिहास से सर्वर नाम आइटम कैसे निकालें

  4. SQL सर्वर विश्लेषण सेवाओं से कनेक्ट नहीं हो सकता, भले ही यह चल रहा हो

  5. डेटाबेस में sql बिट फ़ील्ड अपडेट करें