• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL Server基础之行数据转换为列数据
    POST TIME:2021-10-18 18:01

    准备工作

    创建表

    use [test1]
    go
    
    create table [dbo].[student](
      [id] [int] identity(1,1) not null,
      [name] [nvarchar](50) null,
      [project] [nvarchar](50) null,
      [score] [int] null,
     constraint [pk_student] primary key clustered 
    (
      [id] asc
    )with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
    ) on [primary]
    go

    插入数据

    insert into test1.dbo.student(name,project,score)
    values('张三','android','60'),
       ('张三','ios','70'),
       ('张三','html5','55'),
       ('张三','.net','100'),
       ('李四','android','60'),
       ('李四','ios','75'),
       ('李四','html5','90'),
       ('李四','.net','100');

    使用Case When和聚合函数进行行专列

    语法

    select column_name,
    aggregation function>(case when expression>) 
    from database.schema.table
    group by column_name

    语法解析

    column_name

    数据列列名

    aggregation function

    聚合函数,常见的有:sum,max,min,avg,count等。

    case when expression

    case when表达式

    示例

    select name,
    max(case project when 'android' then score end) as '安卓',
    max(case project when 'ios' then score end) as '苹果',
    max(case project when 'html5' then score end) as 'html5',
    max(case project when '.net' then score end) as '.net'
    from [test1].[dbo].[student]
    group by name

    示例结果

    转换前

    转换后

    使用PIVOT进行行专列

    PIVOT通过将表达式中一列中的唯一值转换为输出中的多个列来旋转表值表达式。并PIVOT在最终输出中需要的任何剩余列值上运行聚合,PIVOT提供比一系列复杂的SELECT...CASE语句指定的语法更为简单和可读的语法,PIVOT执行聚合并将可能的多行合并到输出中的单个行中。

    语法

    select non-pivoted column>, 
      [first pivoted column] as column name>, 
      [second pivoted column] as column name>, 
      ... 
      [last pivoted column] as column name> 
    from 
      (select query that produces the data>)  
      as alias for the source query> 
    pivot 
    ( 
      aggregation function>(column being aggregated>) 
    for  
    [column that contains the values that will become column headers>]  
      in ( [first pivoted column], [second pivoted column], 
      ... [last pivoted column]) 
    ) as alias for the pivot table> 
    optional order by clause>;

    语法解析

    non-pivoted column>

    非聚合列。

    [first pivoted column]

    第一列列名。

    [second pivoted column]

    第二列列名。

    [last pivoted column]

    最后一列列名。

    select query that produces the data>

    数据子表。

    alias for the source query>

    表别名。

    aggregation function>

    聚合函数。

    column being aggregated>

    聚合函数列,用于输出值列,最终输出中返回的列(称为分组列)将对其进行分组。

    [column that contains the values that will become column headers>]

    转换列,此列返回的唯一值将成为最终结果集中的字段。

    [first pivoted column], [second pivoted column], ... [last pivoted column]

    数据行中每一行行要转换的列名。

    optional order by clause>

    排序规则。

    示例

    select b.Name,b.[android],b.[ios],b.[html5],b.[.net] 
    from 
    (select Name,Project,Score from [test1].[dbo].[student])
    as a
    pivot
    (
      max(Score)
      for Project in ([android],[ios],[html5],[.net])
    ) 
    as b
    order by b.name desc

    示例结果

    转换前

    转换后

    注意事项

    1、如果输出列名不能在表转换列中,则不会执行任何计算。

    2、输出的所有列的列名的数据类型必须一致。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • SQL Server将一列的多行内容拼接成一行的实现方法
    • SQLServer行转列实现思路记录
    • Sql Server 2000 行转列的实现(横排)
    • sqlserver2005 行列转换实现方法
    • sqlserver下将数据库记录的列记录转换成行记录的方法
    • sqlserver 行列互转实现小结
    • SQLServer行列互转实现思路(聚合函数)
    • SQL Server行转列的方法解析
    上一篇:Sql server端口未打开连接不上的解决方案
    下一篇:SQL server数据库创建代码 filegroup文件组修改的示例代码
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信