sql >> Databasteknik >  >> RDS >> Sqlserver

T-SQL COALESCE GRUPPER UPPSÄTTNINGAR i en kolumn utan NULL dubbletter

Ursäkta om detta inte riktigt blir som du förväntade dig, men om du helt enkelt behöver bli av med NULL så förstår jag inte varför du inte bara kan göra så här:

;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

Obs:ELSE NULL tas bort här bara för att det inte ändrar någonting (NULL antyds när det inte finns någon ELSE ), inte för att du skulle tjäna något på att ta bort den.




  1. PHP/MySQL-frågeresultat

  2. SQL Server Performance File IO-statistik

  3. Hur använder man MySQL och MSSQL tillsammans i Grails-datakällan?

  4. Hur konverterar man från ett datumformat till ett annat, i Microsoft SQL-server?