Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

ZESTAWY GRUPOWANIA T-SQL COALESCE w jednej kolumnie bez duplikatów NULL

Przepraszam, jeśli okaże się, że to nie jest to, czego się spodziewałeś, ale jeśli po prostu chcesz pozbyć się wartości NULL, nie rozumiem, dlaczego nie możesz po prostu zrobić tak:

;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

Uwaga:ELSE NULL jest tutaj usuwany tylko dlatego, że nic nie zmienia (NULL jest implikowana, gdy nie ma ELSE ), nie dlatego, że cokolwiek zyskałbyś na usunięciu go.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Samozamykające się znaczniki w XML w SQL Server

  2. Czy mogę używać wielu kursorów na jednym połączeniu z pyodbc i MS SQL Server?

  3. Jak działa funkcja NCHAR() w SQL Server (T-SQL)

  4. Domyślna nazwa instancji SQL Server Express

  5. SQL Server konwertuje kolumnę na kolumnę tożsamości