【问题标题】:SQL Pivot Query with Dynamic Columns [duplicate]具有动态列的 SQL 透视查询 [重复]
【发布时间】:2011-12-02 01:34:06
【问题描述】:

可能重复:
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]))

任何正确方向的帮助或指示将不胜感激!

提前致谢!

【问题讨论】:

  • 这里的输出对我来说没有意义。你能为此提供一个用例吗?也许有更好的方法?我认为前 X 个页面更适合数据透视/报告,而不是每个页面都作为一个列。

标签: sql dynamic pivot


【解决方案1】:

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

【讨论】:

  • 嗨蒂姆,感谢您的回复,虽然我无法点击您发布的链接?
  • @SirBelmalot 对此感到抱歉。我更新了链接。
猜你喜欢
  • 1970-01-01
  • 2021-06-13
  • 2016-10-28
  • 1970-01-01
相关资源
最近更新 更多