Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL COALESCE GROUPING SETS dans une seule colonne sans doublons NULL

Désolé si cela ne correspond pas vraiment à ce que vous attendiez, mais si vous avez simplement besoin de vous débarrasser des valeurs NULL, je ne vois pas pourquoi vous ne pouvez pas faire comme ça :

;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

Remarque :ELSE NULL est supprimé ici uniquement parce qu'il ne change rien (NULL est implicite lorsqu'il n'y a pas de ELSE ), pas parce que vous gagneriez quoi que ce soit à le supprimer.