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

Bagaimana cara mengubah baris menjadi kolom di sql server 2005

Ada pertanyaan serupa di sini ,di sini dijawab di stackoverflow.

Anda perlu menggunakan operator PIVOT dalam permintaan Anda untuk mencapai ini. Berikut adalah contoh dan penjelasan tentang bagaimana Anda dapat melakukannya. Contoh ini dirujuk dari ini sumber.

---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                                '],[' + t.Name
                        FROM    TESTTABLE AS t
                        ORDER BY '],[' + t.Name
                        FOR XML PATH('')
                      ), 1, 2, '') + ']'

SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'

EXECUTE(@query)

Penjelasan

1.Bagian pertama dari kueri

SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
                        '],[' + t.Name
                FROM TESTTABLE AS t
                ORDER BY '],[' + t.Name
                FOR XML PATH('')
              ), 1, 2, '') + ']'

memberi Anda hasil rata yang bagus dari nilai kolom Nama Anda dalam satu baris sebagai berikut

[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]  

Anda dapat mempelajari lebih lanjut tentang STUFF dan XML PATH di sini dan di sini .

2.SELECT + @cols + FROM akan memilih semua baris sebagai nama kolom untuk kumpulan hasil akhir (pvt - langkah 3)

yaitu

Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt] 

3.Kueri ini menarik semua baris data yang kita perlukan untuk membuat hasil tab silang. (p) setelah kueri membuat tabel sementara dari hasil yang kemudian dapat digunakan untuk memenuhi kueri untuk langkah 1.

(SELECT t1.Name, t1.Count FROM  TESTTABLE AS t1) p

4. Ekspresi PIVOT

PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt

melakukan peringkasan yang sebenarnya dan menempatkan hasilnya ke dalam tabel sementara yang disebut pvt sebagai

Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------  
257     1500     13      500    200    76


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sertakan bulan yang hilang dalam kueri Grup Berdasarkan

  2. Cara Mengaktifkan Batasan CHECK di SQL Server (Contoh T-SQL)

  3. Alih-alih pemicu di SQL Server kehilangan SCOPE_IDENTITY?

  4. Bagaimana cara mendapatkan tanggal dalam format YYYY-MM-DD dari bidang datetime TSQL?

  5. Temukan hari Senin antara 2 tanggal