使用sql创建动态数据透视表

时间:2015-12-10 17:42:33

标签: sql sql-server tsql

我不想使用静态数据透视,因为我的值是动态的,这是我的表格看起来像

ItemName    Date    Qty
Tomato  11/29/2015  20
Tomato  11/30/2015  15
Apple   12/2/2015   41
Mango   12/3/2015   23
Onion   12/4/2015   11

但我希望看起来像这样,但我不能对ItemName和Date进行硬编码,因为它们总是动态的。

enter image description here

1 个答案:

答案 0 :(得分:1)

尝试下面的查询

--Sample Table Creation

 create table veg
 ( itemname varchar(50),
   [date]   date,
    qty     int
 )

insert into veg
values
('Tomato',  '11/29/2015',  20),
('Tomato',  '11/30/2015' , 15),
('Apple' ,  '12/2/2015'  ,41),
('Mango' ,  '12/3/2015'  , 23),
('Onion' ,   '12/4/2015' ,   11)

--dynamic sql

   DECLARE @col AS NVARCHAR(MAX)
   DECLARE @val AS NVARCHAR(MAX)

   SET @col = STUFF((SELECT distinct ',' + QUOTENAME(c.date)  
               FROM veg c
               FOR XML PATH('')
               ),1,1,'')

   --select @col

   set @val  = 'SELECT itemname, ' + @col + ' from 
               (
            SELECT itemname,date,qty
               FROM veg
               ) SOURCE
               PIVOT 
               (
               SUM(qty)
               FOR date IN (' + @col + ')
               ) p '


   exec (@val)