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

Sql query untuk Transpose dari Tabel dinamis

Dalam kasus Anda, Anda harus menghapus kolom Salary, NoticePeriod, CTC menjadi beberapa baris, lalu PIVOT :

WITH Unpivoted
AS
(
    SELECT Name, Fields, SalaryValue
    FROM salaries AS s
    UNPIVOT
    (
      SalaryValue
      FOR  Fields IN(Salary, NoticePeriod, CTC)
    ) AS u
)
SELECT Fields, jack,bruce
FROM Unpivoted AS u
PIVOT
(
  MAX(SalaryValue)
  FOR Name IN(Jack, Bruce)
) AS p;

UNPIVOT akan mengubah kolom Salary, NoticePeriod, CTC menjadi nilai:

Kemudian pivot akan memutar nilai gaji untuk setiap nilai bidang dan mengubah nama menjadi kolom.

Dan tentu saja Anda harus melakukannya secara dinamis daripada menulis daftar nama seperti ini:

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @colnames AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

SELECT @cols = STUFF((SELECT distinct ',' +
                        QUOTENAME(name)
                       FROM salaries
                      FOR XML PATH(''), TYPE
                     ).value('.', 'NVARCHAR(MAX)') 
                        , 1, 1, '');


SELECT @query = 'WITH Unpivoted
                AS
                (
                    SELECT Name, Fields, SalaryValue
                    FROM salaries AS s
                    UNPIVOT
                    (
                        SalaryValue
                        FOR  Fields IN(Salary, NoticePeriod, CTC)
                    ) AS u
                )
                SELECT Fields, ' + @cols + '
                FROM Unpivoted AS u
                PIVOT
                (
                    MAX(SalaryValue)
                    FOR Name IN(' + @cols + ')' +
                ') p';

execute(@query);

Ini akan memberi Anda:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Pemicu:Transaksi saat ini tidak dapat dilakukan dan tidak dapat mendukung operasi yang menulis ke file log

  2. Permintaan berbeda yang lambat di SQL Server melalui kumpulan data besar

  3. Menggunakan tabel Temp di SSIS

  4. Bagaimana menghitung RowTotal dari CTE yang berjalan dalam waktu yang lebih singkat

  5. Pilih nilai jika kondisi di SQL Server