带有数据透视表的SQL Server查询

时间:2014-03-13 09:03:44

标签: sql sql-server-2008

我有一个SQL查询,它返回以下结果:

Item    Count   Date
-----------------------
item1   10  01MAR14
item1   5   02MAR14
Item2   5   01MAR14
item3   12  03MAR14
item2   12  04MAR14
item3   2   05MAR14
item1   3   05MAR14

但我需要的结果如下:

Item    05MAR14 04MAR14 03MAR14 Before-03MAR14  
----------------------------------------------
item1    3     0         0      15  
item2    0     12        0      5
item3    2     0         12     0

我正在使用SQL Server 2008R2。

1 个答案:

答案 0 :(得分:1)

只是一个简单的想法,为您提供有关透视的知识。我已经用我的日期格式替换了你的日期格式,但最好使用动态查询进行旋转。

CREATE TABLE [dbo].[tblTest](
    [Item] [varchar](50) NOT NULL,
    [Count] [int] NOT NULL,
    [Date] [date] NOT NULL
) 


insert into tblTest values('item1', 10, '01MAR14')
insert into tblTest values('item1', 5 , '02MAR14')
insert into tblTest values('Item2', 5 , '01MAR14')
insert into tblTest values('item3', 12, '03MAR14')
insert into tblTest values('item2', 12, '04MAR14')
insert into tblTest values('item3', 2 , '05MAR14')
insert into tblTest values('item1', 3 , '05MAR14')


SELECT Item, IsNull([2014-03-05], 0) as [2014-03-05], Isnull([2014-03-04], 0) [2014-03-04], IsNull([2014-03-03],0) [2014-03-03], ISNULL([2014-03-02], 0) as 'Before[2014-03-01]'
    FROM (
        SELECT 
            Item, case when [Date] < '2014-03-03' then '2014-03-02' else [DATE] end as [Date],  [Count]
        FROM tblTest
    ) AS s
    PIVOT
    (
        sum([Count])
        FOR [Date] IN ([2014-03-05],[2014-03-04],[2014-03-03], [2014-03-02])
    )AS pivotTable

Output