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
Sql2008的行列转换之行转列的更多相关文章
- Kettle 行列互换之——行转列(多列数据合并成一列变为多行)
原始需求如下: 业务系统设置成这样,见截图. 工资项目为了方便录入,都是做成列的. 但是这些数据需要和另外的费用报销系统的数据关联,费用报销系统的费用项目是横向的,用费用项目.金额的多行来表达.那么这 ...
- [Oracle]行列转换(行合并与拆分)
使用wmsys.wm_concat 实现行合并 在 Oracle 中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示.能够使用函数 wmsys.wm_concat 达成. 这个在上一篇 or ...
- linux文件内容列传行_行转列
================ 文件内容列传行_行转列 ================ 一.列转行 1.编辑测试文件 vi log.txt 16:23:00 8.2% 1773620k 16:2 ...
- KingbaseES 的行列转换
目录 背景 行转列 数据准备 分组聚合函数+CASE 根据压缩数据的格式,横向展开数据列选取不同方式 crosstab函数 PIVOT 操作符 PIVOT 操作符的限制 工具 ksql 的元命令 \c ...
- sql 行专列 列转行 普通行列转换
转载:http://www.cnblogs.com/newwind521/archive/2010/11/25/1887203.html sql 行专列 列转行 普通行列转换 /* 标题:普通行列转换 ...
- kettle——入门操作-行列转换(行转列,字段拆分)
1.Row Normaliser,将一行多列数据转换为多行一列数据. 输入数据流: 计算器配置如下: 与计算器相连接的excel输出如下: Row Normaliser,设置如下, 与Row No ...
- LinQ实现DataTable不定行转列 行列转换,有图
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LinqDemo2.aspx.c ...
- PowerBI/Excel - PowerQuery数据转换系列 - 如何将多行的值串联到一行 - 行列转换
Power Query 是做数据转换.数据清洗的利器,不管是在Excel还是PowerBI,如何玩好Power Query是成功建模的必不可少的一步. 今天要get到的一个新技巧:行列转换 如何将多行 ...
- mysql行转列转换
http://blog.csdn.net/sinat_27406925/article/details/77507478 mysql 行列转换 ,在项目中应用的极其频繁,尤其是一些金融项目里的报表.其 ...
随机推荐
- POJ -- 3233 求“等比矩阵”前n(n <=10^9)项和
Matrix Power Series Description Given a n × n matrix A and a positive integer k, find the sum S = ...
- HDU-4515 小Q系列故事——世界上最遥远的距离
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- 【原】Spark不同运行模式下资源分配源码解读
版权声明:本文为原创文章,未经允许不得转载. 复习内容: Spark中Task的提交源码解读 http://www.cnblogs.com/yourarebest/p/5423906.html Sch ...
- MVC 5 第三章 HTML Helper
提及到HTML helper大家肯定不应该陌生, 因为在书写MVC View的时候肯定需要使用到它.一个HTML Help就是一个返回HTML字符串的方法,这个字符串表示你所期望的类型的内容.例如,你 ...
- SQL中CUBE 用法
转自 http://www.cnblogs.com/dyufei/archive/2009/11/11/2573975.html CUBE 运算符生成的结果集是多维数据集.多维数据集是事实数据(即记录 ...
- Hadoop学习记录(4)|MapReduce原理|API操作使用
MapReduce概念 MapReduce是一种分布式计算模型,由谷歌提出,主要用于搜索领域,解决海量数据计算问题. MR由两个阶段组成:Map和Reduce,用户只需要实现map()和reduce( ...
- HW3.10
public class Solution { public static void main(String[] args) { int number1 = (int)(Math.random() * ...
- POJ3641-Pseudoprime numbers(快速幂取模)
题目大意 判断一个数是否是伪素数 题解 赤果果的快速幂取模.... 代码: #include<iostream> #include<cmath> using namespace ...
- hdoj 3861 The King’s Problem【强连通缩点建图&&最小路径覆盖】
The King’s Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- nyoj 325 zb的生日
01背包 zb的生日 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 今天是阴历七月初五,acm队员zb的生日.zb正在和C小加.never在武汉集训.他想给这两位兄 ...