带有动态列的SQL数据透视查询

时间:2011-12-01 15:01:44

标签: sql dynamic pivot

  

可能重复:
  T-SQL Pivot? Possibility of creating table columns from row values

我一直在徒劳地搜索太久了,不得不承认失败并寻求帮助,我正在尝试修改一个数据透视查询,以便从包含以下数据的表中生成动态查询结果:

    UserId        PageViewed         DateTimeStamp
    1             Index.html         2011-12-01 13:55:01
    1             FAQ.html           2011-12-01 13:58:53
    1             ContactUs.html     2011-12-01 14:00:16
    2             Index.html         2011-12-01 15:55:01
    2             FAQ.html           2011-12-01 15:58:53
    2             ContactUs.html     2011-12-01 15:00:16

要显示类似的内容,页码列取决于用户访问的页数:

    User        StartTime        Page1        Page2        Page3
    1           13:55:01         Index.hml    FAQ.html     ContactUs.html
    2           15:55:01         Index.hml    FAQ.html     ContactUs.html

我通过对列进行硬编码来管理它,但显然我不想继续更改脚本以容纳越来越多的页面。

到目前为止,我有以下几点:

    SELECT p.UserId, 
        CONVERT(TIME, MIN(p.DateTimeStamp), 7) StartTime,
        ISNULL(p.[1],'') Page1
        ISNULL(p.[1],'') Page2
        ISNULL(p.[1],'') Page3
    FROM
    (SELECT UserId
        ,DateTimeStamp
        ,PageViewed
        ,ROW_NUMBER() OVER(PARTITION BY UserId ORDER BY DateTimeStamp) as pOrder
        FROM tbl) AS p
    PIVOT(MIN(PageViewed) FOR pOrder IN ([1],[2],[3]))

非常感谢任何正确方向的帮助或指示!

提前致谢!

1 个答案:

答案 0 :(得分:1)

我见过的关于动态旋转的最好例子是Itzik Ben-Gan的例子。这个相关的SO Question有一个很好的例子,说明你需要做什么。基本上,你需要使用一些动态的sql来实现你的目标。