2010-01-21 117 views
1

我SQL Server 2008上,我有一个包含以下形式的WA指标表:SQL服务器:GROUP BY聚集语义与PIVOT运算

CREATE TABLE #VistitorStat 
(
    datelow datetime, 
    datehigh datetime, 
    name varchar(255), 
    cnt int 
) 

两天的有价值数据表中的样子所以:

2009-07-25 00:00:00.000 2009-07-26 00:00:00.000 New Visitor  221 
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000 Unique Visitors 225 
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000 Return Visitors 0 
2009-07-25 00:00:00.000 2009-07-26 00:00:00.000 Repeat Visitors 22 
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000 New Visitor  263 
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000 Unique Visitors 269 
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000 Return Visitors 4 
2009-07-26 00:00:00.000 2009-07-27 00:00:00.000 Repeat Visitors 38 

我想由天组,并转动指标成排的形式。使用我能找到的PIVOT运算符的示例仅显示基于SUMMAX聚合函数的聚合。据推测,我需要将GROUP BY语义传达给PIVOT操作员 - 注意:我找不到任何有关如何实现此操作的明确示例/文档。是否有人可以使用此查询的PIVOT运算符发布此正确语法 -

如果这不可能与枢轴 - 你能想出一个优雅的方式来编写查询?如果没有,我只需要以转置的形式生成数据。

帖子答案编辑:

我得出的结论是,枢轴运营商unelegant(到目前为止,我认为这是一个语法破解版) - 我已经在转置产生的数据的问题解决了时尚。我欢迎评论。

回答

1

我不太清楚你想要的结果,但是这给每天一个行:

CREATE TABLE #VistitorStat 
(
datelow datetime, 
datehigh datetime, 
name varchar(255), 
cnt int 
) 


insert into #VistitorStat 
     select '2009-07-25 00:00:00.000','2009-07-26 00:00:00.000', 'New Visitor',  221 
union select '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000', 'Unique Visitors', 225 
union select '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000', 'Return Visitors', 0 
union select '2009-07-25 00:00:00.000',' 2009-07-26 00:00:00.000', 'Repeat Visitors', 22 
union select '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000', 'New Visitor' , 263 
union select '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000', 'Unique Visitors', 269 
union select '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000', 'Return Visitors', 4 
union select '2009-07-26 00:00:00.000',' 2009-07-27 00:00:00.000', 'Repeat Visitors', 38 


select * from #VistitorStat 
pivot (
    sum(cnt) 
    for name in ([New Visitor],[Unique Visitors],[Return Visitors], [Repeat Visitors]) 

) p 
+0

(+1)是的,这确实起作用。语法很奇怪 - 它甚至没有意义 - 我不想添加'cnt'值 - 但它的工作原理是:D。 – 2010-01-21 15:37:25