Sql server SQL Server:使用PIVOT运算符的分组聚合语义
我使用SQL Server 2008,我有一个表,其中包含以下形式的WA度量:Sql server SQL Server:使用PIVOT运算符的分组聚合语义,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我使用SQL Server 2008,我有一个表,其中包含以下形式的WA度量: 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 0
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
运算符的示例仅显示基于SUM
和MAX
聚合函数的聚合。大概我需要将groupby
语义传达给PIVOT
操作符——注意:我找不到任何关于如何实现这一点的清晰示例/文档。请有人使用此查询的PIVOT运算符发布此--的正确语法
如果使用pivot无法做到这一点,您能想出一种优雅的方式来编写查询吗?如果不是的话,我只需要以转置的形式生成数据
回答后编辑:
我已经得出结论,枢轴操作符是不优雅的(到目前为止,我认为它是语法黑客)——我已经通过转置方式生成数据来解决这个问题。欢迎评论。
我不确定您想要的结果,但这每天都会给出一行: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
我不确定您想要的结果,但这每天给出一行:
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
(+1)是的,成功了。语法非常奇怪--甚至没有意义--我不想添加cnt
值--但它可以工作:D.(+1)是的,这就成功了。语法非常奇怪——甚至没有意义——我不想添加cnt
值——但它可以工作:D。