क्षमा करें यदि यह वास्तव में आपकी अपेक्षा के अनुरूप नहीं है, लेकिन यदि आपको केवल 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
नहीं है ), इसलिए नहीं कि इसे हटाने से आपको कुछ हासिल होगा।