【问题标题】:SQL Server 2008, pivot with no aggregate fuctionSQL Server 2008,无聚合函数的数据透视
【发布时间】:2016-12-29 05:45:38
【问题描述】:

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

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

installed/removed 是一个标志,表示 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 不会让我以这种方式显示数据...

【问题讨论】:

  • 显示“使用最大/最小”不会导致预期结果的查询。

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


【解决方案1】:

使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多