Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

T-SQL COALESCE NHÓM TẬP HỢP thành một cột duy nhất mà không có NULL trùng lặp

Xin lỗi nếu điều này thực sự không như bạn mong đợi, nhưng nếu bạn chỉ cần loại bỏ NULL thì tôi không hiểu tại sao bạn không thể làm như thế này:

;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

Lưu ý:ELSE NULL chỉ bị xóa ở đây vì nó không có gì thay đổi (NULL được ngụ ý khi không có ELSE ), không phải vì bạn sẽ thu được gì khi xóa nó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể tuần tự hóa dữ liệu ngày giờ JSON trong truy vấn SQL Server 2008 không

  2. Tên cột và / hoặc tên bảng dưới dạng tham số

  3. Đặt giá trị mặc định trong cột IF điều kiện được đáp ứng trong SQL 2008

  4. SQL Server 2008 - chia cột nhiều giá trị thành các hàng với các giá trị duy nhất

  5. Làm thế nào để xác thực đa giác địa lý trong SQL server 2008?