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

Mengubah hasil kolom menjadi satu baris

Anda mencoba untuk PIVOT data. SQL server memiliki PIVOT fungsi yang dapat melakukan ini untuk Anda. Untuk melakukan PIVOT Anda perlu memutuskan fungsi agregat apa yang akan digunakan. Dalam sampel saya, saya menggunakan MAX() tetapi Anda dapat menggunakan SUM() , dll.

Jika Anda tidak memiliki fungsi pivot maka Anda dapat menggunakan fungsi agregat dengan CASE pernyataan untuk melakukan ini.

Versi Agregat/KASUS: Versi ini mengharuskan Anda mengkodekan semua nama ke dalam kolom.

select 
  max(case when name = 'Engineering' then rating end) Engineering,
  max(case when name = 'Financials' then rating end) Financials,
  max(case when name = 'Scope' then rating end) Scope,
  max(case when name = 'Schedule' then rating end) Schedule,
  max(case when name = 'Risks' then rating end) Risks,
  max(case when name = 'People' then rating end) People
from yourtable

Lihat SQL Fiddle dengan Demo

Versi PIVOT statis: Anda akan membuat kode nilai dari nama-nama tersebut ke dalam kueri ini

select *
from
(
  select name, rating
  from yourtable
) src
pivot
(
  max(rating)
  for name in ([Engineering], [Financials], [Scope],
               [Schedule], [Risks], [People])
) piv

Lihat SQL Fiddle dengan Demo

Versi di atas berfungsi dengan baik jika Anda memiliki jumlah kolom yang diketahui, tetapi jika name . Anda nilainya tidak diketahui, maka Anda dapat menggunakan sql dinamis untuk PIVOT datanya.

Versi PIVOT Dinamis:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name) 
                    from yourtable
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT ' + @cols + ' from 
             (
                select name, rating
                from yourtable
            ) x
            pivot 
            (
                max(rating)
                for name in (' + @cols + ')
            ) p '

execute(@query)

Lihat SQL Fiddle dengan Demo

Ketiga versi akan menghasilkan hasil yang sama:

| ENGINEERING | FINANCIALS | SCOPE | SCHEDULE | RISKS | PEOPLE |
----------------------------------------------------------------
|           1 |          3 |     1 |        2 |     3 |      3 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memigrasi Pekerjaan SQL Server Dari Satu Instance SQL Server Ke Yang Lain

  2. Prosedur tersimpan server SQL mengembalikan tabel

  3. Ekstrak Nomor Minggu dari Tanggal di SQL Server (T-SQL)

  4. Terjadi kesalahan parah pada perintah saat ini ketika mencoba memasukkan dari server tertaut

  5. Cara Menghapus Karakter Leading dan Trailing di SQL Server