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

Bagaimana cara membuat ringkasan dengan bergabung ke satu tabel dengan SQL Server?

Dengan asumsi Anda menggunakan SQL Server 2005 atau lebih tinggi, berikut adalah kodenya:

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 )

Ini akan berfungsi tidak peduli berapa banyak status berbeda yang Anda miliki. Ini secara dinamis merakit kueri dengan PIVOT .

Perbarui

Seperti yang ditunjukkan @JonH, ada kerentanan dalam kode yang saya posting, yang memungkinkan serangan injeksi. Ini sekarang diperbaiki, dengan menggunakan QUOTENAME saat membentuk nama kolom.

Contoh lain:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungkan beberapa baris

  2. Layanan pelaporan server SQL:cara menghentikan penembakan laporan saat dibuka

  3. Gagal memperbarui database .mdf karena database hanya-baca (aplikasi Windows)

  4. Bagaimana cara membuat tabel berdasarkan tabel lain?

  5. prosedur tersimpan dengan sqlAlchemy