zoukankan      html  css  js  c++  java
  • Sql2008的行列转换之行转列

    今天在工作的时候遇到了行列转换的问题,记得去年有一段时间经常写,但是许久不用已经记不太得了。好记性不如烂笔头,忙完之后赶紧记录一下。

    关键字:PIVOT(行转列),UNPIVOT(列转行)

    先说说 PIVOT(行转列)这是我今天遇到的问题


    PIVOT(行专列)

    主要语法:PIVOT(聚合函数(列) FOR 列 in (…) )AS P


    完整语法:

    table_source

    PIVOT(

    聚合函数(value_column)

    FOR pivot_column

    IN(<column_list>)

    )


    举例(这个最重要,没有例子只有概念的文章,不是好文章)

    我这里有一张表

    其中OperationDate这里一列是日期,要求是:对日期进行分组,统计Testuser每天的操作。最重要的是日期要做为列名显示,如下图

    直接贴sql语句

    DECLARE @columnNme NVARCHAR(4000)
    SELECT @columnNme = ISNULL(@columnNme + ',', '') + QUOTENAME(CONVERT(varchar(100), [OperationDate], 23)) FROM [Test].[dbo].[OperationData]
    group by CONVERT(varchar(100), [OperationDate], 23)
    order by CONVERT(varchar(100), [OperationDate], 23)

    --select(@columnNme )

    ---上面一部分,是取出不重复的日期,一会儿要做为列名, QUOTENAME是在“xxxx-xx-xx”这种不规则的列名合法化,它会变成[xxxx-xx-xx] , 加了两个[  ]
    Declare @sql NVARCHAR(4000)
    set @sql = 'select * from
    (
    SELECT od.UserName
    ,CONVERT(varchar(100), od.[OperationDate], 23) as 日期
    ,COUNT(1) as 浏览数
    FROM [Test].[dbo].[OperationData] as od
    group by CONVERT(varchar(100), od.[OperationDate], 23),od.UserName
    ) as t
    pivot (
         max(浏览数) for 日期
         in ('+@columnNme +')
    ) as result'

    --select(@sql)
    EXEC( @sql)

    这种写法是列名数量不固定的时候,需要动态生成。

    下面是静态列名,也就是列名的数量是固定的

    select * from
    (
         SELECT od.UserName,CONVERT(varchar(100),od.[OperationDate], 23) as 日期,COUNT(1) as 浏览数
         FROM [Test].[dbo].[OperationData] as od
        group by CONVERT(varchar(100), od.[OperationDate], 23),od.UserName
        ) as t
        pivot (
        max(浏览数) for 日期
        in
        (
            [2016-05-21],
            [2016-05-22],
            [2016-05-23]
        )
    ) as result

  • 相关阅读:
    设置Tomcat根目录
    使用Servlet Filter做Login checking
    Javac命令一次编译一个目录下的所有java文件
    Java ArrayList操作
    Java 读Properties
    Java文件读写
    Servlet Listener
    Servlet连接数据库
    Servlet Filter 3
    Servlet Filter 2
  • 原文地址:https://www.cnblogs.com/tfiremeteor/p/5519910.html
Copyright © 2011-2022 走看看