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
转载于:https://www.cnblogs.com/tfiremeteor/p/5519910.html
Sql2008的行列转换之行转列相关推荐
- 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转换、行转列)
全网最详细的Hive文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 系列历史文章 前言 Hive的内置函数 一.数学函数 1. 取整函数: round ...
- [Oracle]行列转换(行合并与拆分)
使用wmsys.wm_concat 实现行合并 在 Oracle 中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示,可以使用函数 wmsys.wm_concat 达成. 这个在上一篇 or ...
- SQL ON Hadoop-Hive(六)-字符串函数+行列转换
一.hive常用字符串函数 1.字符串反转函数reverse(string A) --返回值类型stringselect reverse('gian') from iteblog; --'naig'2 ...
- Mysql实现行列转换
mysql数据库如何实现行列转换 1. 行转列: 方案一: select name, sum(case when course='java' then grade end) as java, sum( ...
- Oracle 行转列
一.简易运用 -->没转之前一个主号绑定多个副号的多行输出(像移动的欢乐在线) SELECT f.town_name 镇区, f.school_name 学校, ...
- Oracle 行列转换
Oracle 行列转换 1.固定列数的行列转换 如 student subject grade --------- ---------- -------- student1 语文 80 student ...
- Excel行列转置(行数据与列数据的转换)
Excel行列转换的方法就是选择性粘贴. 将以行形式存储的数据复制后,选中其他空白单元格,右键,选择"选择性粘贴",打开"选择性粘贴"对话框,勾选"转 ...
- oracle10行转列,【转】oracle 10g 行列转换的写法
11g中有更好的解决方式,有个pivot函数 1 假如有如下表,其中各个i值对应的行数是不定的SQL> select * from t; I A D ---- ---- ------- 1 b ...
- mysql行转列transform_MySQL学习之行列转换案例
前言 Oracle中的pivot/unpivot函数可以很方便的帮助我们实现行列转换,但是MySQL并不支持. 可以在SQL上想办法,比如pivot考虑用聚合函数+case when, unpiovt ...
最新文章
- 基于JSP的开题报告定做
- 今天,小程序正式支持 SVG
- ML之LoRDTRF:基于LoRDT(CART)RF算法对mushrooms蘑菇数据集(22+1,6513+1611)训练来预测蘑菇是否毒性(二分类预测)
- 【转】根据起止日期+时间取数
- Linux文件系统及磁盘分区与格式化(二次排版)
- Leedcode6-binary-tree-preorder-traversal
- wire 和 reg_Wire和Launchkit开源,水流监控系统以及更多新闻
- 基于java的打砖块游戏_cocos creator 制作的打砖块游戏
- AngularJS 后台交互
- 论文阅读笔记(audio-visual相关)—Co-Separating Sounds of Visual Objects
- Docker - 配置国内加速器加速镜像下载
- 讯为4412蜂鸣器驱动实现
- python代码编辑器
- 【noip模拟赛1】古韵之鹊桥相会(最短路)
- ubuntu禁止指定软件包更新
- MMWHS-文献阅读(图像分割)
- 传腾讯计划出售美团全部股权,知情人士辟谣;苹果证实iOS 16要大量推送广告;Linux 6.0-rc1 发布|极客头条...
- 教育直播系统如何开发?
- 【学海】再看傅里叶变换和欧拉公式
- devmem读写物理内存
热门文章
- python简单好看的代码_Python新手写出漂亮的爬虫代码1
- python字典更新值_Python 字典 update() 使用方法及示例
- python两数相加取_Leetcode_两数相加_Python
- 分割svm的超平面数学特征
- 如何用df的两列作复杂的运算
- jacobi迭代法matlab_解线性方程组的经典迭代法(1)-理论
- 嵌入式linux 配置usb otg,嵌入式系统设计中的USB OTG方案
- Systemctl stop XXX 时间太长
- android p新功能_android 11今天发布这是新功能
- 笔记-项目整体管理-变更管理-变更管理的原则