2011-12-01 104 views
4

可能重复:
T-SQL Pivot? Possibility of creating table columns from row valuesSQL查询透视与动态列

我徒劳的在寻找太久,现在不得不承认失败,寻求帮助,我m试图修改数据透视查询以产生来自具有如下数据的表的动态查询结果:

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])) 

在正确的方向上没有任何帮助或指针将不胜感激!

在此先感谢!

+0

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

回答

1

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

+0

嗨蒂姆,感谢您的回应,虽然我无法点击到您发布的链接? –

+0

@SirBelmalot很抱歉。我更新了链接。 –