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

Làm cách nào để tạo bản tóm tắt bằng cách tham gia vào một bảng duy nhất với SQL Server?

Giả sử bạn đang sử dụng SQL Server 2005 trở lên, đây là mã:

DECLARE @cols VARCHAR(1000)
DECLARE @sqlquery VARCHAR(2000)

SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName(cast([status] as varchar))
                        FROM LogTable FOR XML PATH('') ), 1, 1, '') 


SET @sqlquery = 'SELECT * FROM
      (SELECT UserIndex,  [status]
       FROM LogTable ) base
       PIVOT (Count(status) FOR [status]
       IN (' + @cols + ')) AS finalpivot'

EXECUTE ( @sqlquery )

Điều này sẽ hoạt động cho dù bạn có bao nhiêu trạng thái khác nhau. Nó tự động kết hợp một truy vấn với PIVOT .

Cập nhật

Như @JonH đã chỉ ra, có một lỗ hổng trong mã mà tôi đã đăng, có thể xảy ra một cuộc tấn công tiêm. Điều này hiện đã được khắc phục bằng cách sử dụng QUOTENAME khi tạo tên cột.

Các ví dụ khác:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cú pháp chính xác để sử dụng Database.ExecuteSqlCommand với các tham số là gì?

  2. lựa chọn toán tử tối ưu hóa truy vấn - vòng lặp lồng nhau so với đối sánh băm (hoặc hợp nhất)

  3. Trả về các hàng có ID nằm trong chuỗi được phân tách bằng dấu chấm phẩy từ truy vấn con MSSQL

  4. Khung thực thể không hoạt động với bảng tạm thời

  5. FOR XML PATH (''):Bỏ qua các ký tự đặc biệt