使用sql创建动态透视

使用sql创建动态透视,sql,sql-server,tsql,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 但我想看起来像这样,但我不能硬编码项目名称和日期,因为它们总是动态的 尝试下面的查询 --Sample Table Creation create tabl

我不想使用静态透视,因为我的值是动态的,下面是我的表的外观

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
但我想看起来像这样,但我不能硬编码项目名称和日期,因为它们总是动态的

尝试下面的查询

--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)