sql server如何通过pivot对数据进行行列转换(进阶)[亲测有效]

sql server如何通过pivot对数据进行行列转换(进阶)[亲测有效]脚本: /* 说明:sql server如何通过pivot对数据进行行列转换(进阶),用于员工业绩按月龙虎排行榜、客户销售金额按月排行榜等 脚本来源:https://www.cnblogs.com/z

sql server如何通过pivot对数据进行行列转换(进阶)

脚本:

/*
说明:sql server如何通过pivot对数据进行行列转换(进阶),用于员工业绩按月龙虎排行榜、客户销售金额按月排行榜等
脚本来源:https://www.cnblogs.com/zhang502219048/p/13173228.html
作者:zhang502219048
作者微信公众号:SQL数据库编程(微信号zhang502219048)
*/

declare @n int = 2

create table #t1
(
    [月份] nvarchar(50),
    [业务员] nvarchar(50),
    [金额] int
)
insert into #t1
values(N"2020-01", N"业务员1", N"100")
    , (N"2020-01", N"业务员2", N"200")
    , (N"2020-02", N"业务员2", N"300")
    , (N"2020-02", N"业务员3", N"400")
    , (N"2020-03", N"业务员4", N"500")
    , (N"2020-03", N"业务员5", N"600")
    , (N"2020-04", N"业务员1", N"700")
    , (N"2020-04", N"业务员3", N"800")

--select * from #t1

select [行序号] = row_number() over(partition by [月份] order by [金额] desc)
     , *
into #t2
from #t1

--select * from #t2

create table #t3
(
    [列序号] int,
    [行序号] int,
    [月份] nvarchar(50),
    [结果] nvarchar(50),
    [类型] nvarchar(50)
)

insert into #t3
select [列序号] = 1, [行序号], [月份], [结果] = [业务员], [类型] = [月份] + N"-业务员"
from #t2

insert into #t3
select [列序号] = 2, [行序号], [月份], [结果] = [金额], [类型] = [月份] + N"-金额"
from #t2

--select * from #t3

declare @sqlIn nvarchar(max) = ""
select @sqlIn = @sqlIn + case when @sqlIn <> "" then "," else "" end + "[" + [类型] + "]" 
from (select distinct [列序号], [月份], [类型] from #t3) a
order by [月份], [列序号]
--select @sqlIn

--行列转换后的目标数据
declare @sql nvarchar(max) = "
select top " + cast(@n as nvarchar(10)) + @sqlIn + "
from (select [行序号], [结果], [类型] from #t3) D
pivot(max([结果]) for [类型] in (" + @sqlIn + ")) Q
order by [行序号]
"
exec(@sql)

drop table #t1, #t2, #t3

代码100分

脚本运行结果:
sql server如何通过pivot对数据进行行列转换(进阶)[亲测有效]

【转载请注明博文来源:https://www.cnblogs.com/zhang502219048/p/13173228.html】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7770.html

(0)
上一篇 2023-03-14
下一篇 2023-03-14

相关推荐

  • 安装anaconda3教程

    安装anaconda3教程Anaconda是一个全平台的Python发行版,包括conda,python等工具,是python语言的集成环境。Anaconda3是包含了Python3.x版本和各种常用库的一个安装包,下面是Anaconda3的安装步骤。

    2024-07-11
    43
  • 【redis】本地连接服务器的redis教程「建议收藏」

    【redis】本地连接服务器的redis教程「建议收藏」事情的起因呢,是因为朋友问我的。几经周折,自己粗心大意了很多细节,不废话,直接开始 一、redis的安装我就略过了, 二、修改redis的配置文件 redis.conf 1. bind 设置为 0.0

    2023-02-13
    151
  • 如何完全卸载Python 3

    如何完全卸载Python 3a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-05-30
    61
  • Redis入门(5) – 消息通知

    Redis入门(5) – 消息通知使用列表实现任务队列 优先级队列 按照规则订阅 Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不

    2023-03-06
    152
  • markdown的python(markdown)

    markdown的python(markdown)Markdown本来就是依托于HTML,没有HTML就没有Markdown,因此正常的操作就是先将Markdown解析为HTML格式文本,再对其进行处理。

    2023-10-28
    139
  • Python中print函数的占位符

    Python中print函数的占位符随着Python的不断发展,Python的使用越来越广泛,Python中的print函数是常用的输出函数,而占位符是print函数中的重要组成部分,也是一个非常有用的技巧。

    2024-04-27
    70
  • 1.4 Apache Hadoop完全分布式集群搭建-hadoop[亲测有效]

    1.4 Apache Hadoop完全分布式集群搭建-hadoop[亲测有效]1.4 Apache Hadoop 完全分布式集群搭建 软件和操作系统版本 Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 集群: 知识点学习:统一使用v

    2023-06-18
    131
  • IfcAdvancedBrep Example— Basin advanced brep

    IfcAdvancedBrep Example— Basin advanced brep
    使用NURBS的高级brep表示如下图所示。它显示了一个盆地作为一个疗养院的放置点。 ——基于NURBS的高级brep表示 注:文件中没有颜色信息,显示的颜…

    2023-04-03
    156

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注