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

Ubah Nama Kolom secara dinamis di sql

SQL Fiddle

Penyiapan Skema :

create table history (date datetime, name varchar(10), value int);
insert history values
 ('20130101', 'user1', 123),
 ('20130101', 'user2', 124),
 ('20130101', 'user3', 125),
 ('20130102', 'user1', 223),
 ('20130102', 'user3', 223),
 ('20130103', 'user2', 323);

create table colours (name varchar(10), colour_name varchar(10));
insert colours values
 ('user1', 'blue'),
 ('user2', 'green'),
 ('user3', 'brown');

Kueri :

DECLARE @scols nvarchar(max),
        @cols AS NVARCHAR(MAX),
        @query AS NVARCHAR(MAX);

select @cols = STUFF((
  SELECT ',' + QUOTENAME(C.Name)  
  from (select distinct name from [History]) C
  ORDER BY C.Name
  FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');

select @scols = STUFF((
  SELECT ',' + QUOTENAME(Name) + ' AS ' + QUOTENAME(colour_Name)  
  from (select distinct c.name, x.colour_name
        from [History] C
        JOIN colours x on x.name = c.name) y
  ORDER BY Name
  FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'');

set @query = '
    SELECT [Date],' + @scols +' 
    from (
        select [Date], Name, Value
        from [History]
         ) x
    pivot 
         (
        max(value)
        for Name in (' + @cols + ')
         ) p ';

-- print @query --<< uncomment this line to see the query that gets generated
exec (@query);

Hasil :

|                           DATE |   BLUE |  GREEN |  BROWN |
-------------------------------------------------------------
| January, 01 2013 00:00:00+0000 |    123 |    124 |    125 |
| January, 02 2013 00:00:00+0000 |    223 | (null) |    223 |
| January, 03 2013 00:00:00+0000 | (null) |    323 | (null) |


  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 menyalin data dan tabel database dari satu database ke database lainnya

  2. SQL Server:pilih baris terbaru yang jumlahnya cocok dengan nilai

  3. Bagaimana cara membuat dan mengisi tabel dalam satu langkah sebagai bagian dari operasi impor CSV?

  4. Apakah mungkin menggunakan MS VS Database Project sebagai solusi lengkap untuk versi database?

  5. Kunci Asing SQL Server melintasi batas basis data - teknik untuk penegakan