sql >> Database teknologi >  >> RDS >> Sqlserver

T-SQL COALESCE GRUPPER SET i enkelt kolonne uden NULL dubletter

Beklager, hvis dette viser sig ikke rigtigt, som du forventede, men hvis du simpelthen har brug for at slippe af med NULLs, så kan jeg ikke se, hvorfor du ikke bare kan gøre sådan her:

;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

Bemærk:ELSE NULL er kun fjernet her, fordi det ikke ændrer noget (NULL er underforstået, når der ikke er nogen ELSE ), ikke fordi du ville vinde noget ved at fjerne det.




  1. COUNT(DISTINCT) i flere kolonner i SQL Server 2008

  2. Vælg dynamisk kolonne i SQL-forespørgsel

  3. Hvordan kan jeg helt afinstallere oracle 11g?

  4. Visual Studio - Kunne ikke linke MySql-databasetabel til DataSet