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

T-SQL COALESCE GROUPING SETS को बिना किसी डुप्लिकेट के सिंगल कॉलम में सेट करता है

क्षमा करें यदि यह वास्तव में आपकी अपेक्षा के अनुरूप नहीं है, लेकिन यदि आपको केवल NULLs से छुटकारा पाने की आवश्यकता है, तो मैं यह देखने में विफल हूं कि आप ऐसा क्यों नहीं कर सकते:

;WITH CTEterm AS (
    SELECT
       ROW_NUMBER() OVER (PARTITION BY #term.en, refterm.en
                              ORDER BY #term.en) AS rownumber,
       #term.en AS mainterm,
       CHAR(9) + 'SN ' + #term.enscope AS scopenote,
       CHAR(9) + #link.reltype + CHAR(32) + refterm.en AS subterms,
       CHAR(9) + 'CODE ' + #categorylink.code AS codes
    FROM #link
       INNER JOIN #term ON #term.termid = #link.termid
       INNER JOIN #term AS refterm ON refterm.termid = #link.refid
       LEFT JOIN #categorylink ON #term.termid = #categorylink.termid
)
SELECT
  AggValue
FROM (
  SELECT
    mainterm, codes, subterms, scopenote,
    COALESCE(
      CASE WHEN rownumber = 1 THEN mainterm ELSE NULL END,
      scopenote,
      subterms,
      codes
    ) AS AggValue
  FROM CTEterm
  GROUP BY GROUPING SETS ((mainterm, rownumber), (mainterm, scopenote),
                          (mainterm, subterms), (mainterm, codes))
) s
WHERE AggValue IS NOT NULL
ORDER BY mainterm, codes, subterms, scopenote

नोट:ELSE NULL यहां केवल इसलिए हटाया जाता है क्योंकि यह कुछ भी नहीं बदलता है (NULL निहित है जब कोई ELSE नहीं है ), इसलिए नहीं कि इसे हटाने से आपको कुछ हासिल होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर 2016:एक डेटाबेस पुनर्स्थापित करें

  2. SQL सर्वर बिट डेटाटाइप - अल्टीमेट गाइड

  3. SQL सर्वर एक्सप्रेस बनाम एक्सप्रेस लोकलडीबी

  4. SQL सर्वर में उपयोगकर्ता और लॉगिन के बीच अंतर

  5. एकता से डेटाबेस से कैसे जुड़ें