Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

T-SQL COALESCE GROUPING SETS в една колона без NULL дубликати

Съжалявам, ако това не се окаже точно това, което очаквахте, но ако просто трябва да се отървете от NULL, тогава не разбирам защо не можете да направите просто така:

;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

Забележка:ELSE NULL се премахва тук само защото не променя нищо (NULL се подразбира, когато няма ELSE ), не защото бихте спечелили нещо от премахването му.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка 0xc0202049:Задача на потока от данни 1:Неуспешно вмъкване в колоната само за четене

  2. Как да направите заявка за ролите на текущия потребител

  3. Как да създадете csv изходен файл от съхранена процедура в SQL Server

  4. Промяна на таблици, които се репликират в SQL Server 2008 R2

  5. Техники за оптимизация на заявки в SQL Server:5 най-добри практики за повишаване на производителността на заявките