sql >> Database >  >> RDS >> Sqlserver

T-SQL COALESCE GROEPSETS in één kolom zonder NULL-duplicaten

Sorry als dit niet echt blijkt te zijn wat je had verwacht, maar als je gewoon van NULL's af wilt komen, begrijp ik niet waarom je het niet gewoon zo kunt doen:

;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

Opmerking:ELSE NULL wordt hier alleen verwijderd omdat het niets verandert (NULL wordt geïmpliceerd als er geen ELSE . is ), niet omdat je er iets aan zou hebben om het te verwijderen.




  1. Kan Count(*) ooit null retourneren?

  2. Het verwijderen van PostgresSql 9.6 werd plotseling traag

  3. Hoe leidende witruimte in SQL Server te verwijderen - LTRIM()

  4. Hoe kan ik selectief een XLS importeren in een SQL Server 2008-tabel?