SQL Server 2008,没有聚合功能的数据透视表

时间:2016-12-29 05:45:39

标签: sql sql-server sql-server-2008 pivot

我有一个如下所示的数据库表:

product||installed/removed||date
      A||                1||Jan 1, 2016
      A||                0||Mar 16, 2016
      A||                1||May 15, 2016
      B||                1||Feb 3, 2016
      C||                0||Nov 15, 2015
      D||                1||Dec 4, 2015

安装/删除是一个标志,表示1 =已安装,0 =已删除。

我想让它看起来像这样:

Product||           1|| 0
      A|| Jan 1 2016 || Mar 16, 2016
      A|| May 152016 || NULL
      B|| Feb 3 2016 || NULL
      C||       NULL || Nov 15, 2015
      D|| DEC 4 ,2015|| NUll

但是使用max / min不会让我以这种方式显示数据......

1 个答案:

答案 0 :(得分:2)

PIVOTROW_NUMBER()一起使用,即可解决此问题,

DECLARE @TABLE  TABLE
(   product NVARCHAR(100)
    ,in_rem tinyint
    ,[date] date    
)

INSERT INTO @TABLE
VALUES ('A',1,'Jan 1, 2016'),('A',0,'Mar 16, 2016'),('A',1,'May 15, 2016'),
        ('B',1,'Feb 3, 2016'),('C',0,'Nov 15, 2015'),('D',1,'Dec 4, 2015')

SELECT  product,[1],[0]
FROM    (   SELECT  *
                    ,ROW_NUMBER() OVER(PARTITION BY in_rem ORDER BY product,[date]) AS [ROW_NO]
            FROM    @TABLE  
        )   AS  T
PIVOT (MIN([date]) FOR in_rem IN ([1],[0]))PVT
ORDER BY product