代码之家  ›  专栏  ›  技术社区  ›  Hassan Syed

SQL Server:使用pivot运算符按聚合语义分组

  •  1
  • Hassan Syed  · 技术社区  · 15 年前

    我在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 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 聚合函数。大概我需要转达一下 GROUP BY 语义到 枢轴 操作员——注意:我找不到任何关于如何实现这一点的清晰示例/文档。有人能把这个的正确语法贴出来吗-- 使用Pivot运算符 --这个查询。

    如果Pivot不能做到这一点,那么您能想出一种优雅的方式来编写查询吗?如果没有,我只需要以转置形式生成数据。

    回答后编辑:

    我得出了这样的结论:Pivot运算符是不相关的(到目前为止,我认为它是语法攻击),我通过以转置方式生成数据解决了这个问题。我欢迎评论。

    1 回复  |  直到 9 年前
        1
  •  1
  •   DomreiRoam    15 年前

    我不确定你想要的结果,但这每天都有一行:

    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