sql >> Databáze >  >> RDS >> Sqlserver

T-SQL COALESCE GROUPING SADA do jednoho sloupce bez duplikátů NULL

Omlouvám se, pokud to ve skutečnosti není to, co jste očekávali, ale pokud se prostě potřebujete zbavit NULL, nechápu, proč to nemůžete udělat takto:

;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

Poznámka:ELSE NULL je zde odstraněn pouze proto, že nic nemění (NULL je implicitní, když neexistuje ELSE ), ne proto, že byste jeho odstraněním něco získali.




  1. Sloučit řádky se stejným ID do pole

  2. Jak vložím více záznamů do jednoho databázového výletu pomocí PDO?

  3. Mapování jedné třídy Entity do dvou různých databází (Oracle a Ingres)

  4. Sestavte dočasnou tabulku s dynamickým SQL Serverem 2008