Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

T-SQL COALESCE GROUPING SET menjadi satu kolom tanpa duplikat NULL

Maaf jika ini ternyata tidak seperti yang Anda harapkan, tetapi jika Anda hanya perlu menyingkirkan NULL maka saya gagal melihat mengapa Anda tidak bisa melakukan seperti ini:

;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

Catatan:ELSE NULL dihapus di sini hanya karena tidak mengubah apa pun (NULL tersirat ketika tidak ada ELSE ), bukan karena Anda akan mendapatkan apa pun dari menghapusnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kembalikan identitas baris yang terakhir dimasukkan dari prosedur tersimpan

  2. Solusi Ekspresi Reguler SQL Server di T-SQL?

  3. Wildcard Terkemuka Pencarian Teks Lengkap SQL Server

  4. Parameterise nama tabel di .NET/SQL?

  5. DB_NAME() vs ORIGINAL_DB_NAME() di SQL Server:Apa Bedanya?