经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换。

1.创建一张表

CREATE TABLE [android_source](
[CREATETIME] [datetime] NULL,
[SOURCE] [nvarchar](255) NULL,
[COUNT] [float] NULL
)

2.插入测试数据

insert android_source (CREATETIME,SOURCE,COUNT)  values ( '2013-07-13 00:00:00.000','1xingdong',3);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','eoemarket',1);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','lenovomm',2);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','mqidian',2);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','mumayi',5);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','nduoa',1);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','paojiao',4);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-13 00:00:00.000','qidian',5);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','1xingdong',20);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','eoemarket',7);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','lenovomm',21);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','mqidian',43);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','mumayi',17);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','nduoa',14);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','paojiao',8);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-14 00:00:00.000','qidian',72);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-15 00:00:00.000','1xingdong',30);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-15 00:00:00.000','eoemarket',22);
insert android_source (CREATETIME,SOURCE,COUNT) values ( '2013-07-15 00:00:00.000','lenovomm',32);

3.列转行

SELECT
CONVERT(varchar(10), [CREATETIME],120) as CreateTime,
MAX(CASE [SOURCE] WHEN 'qidian' THEN [COUNT] ELSE 0 END) AS 'qidian',
MAX(CASE [SOURCE] WHEN 'paojiao' THEN [COUNT] ELSE 0 END) AS 'paojiao',
MAX(CASE [SOURCE] WHEN 'nduoa' THEN [COUNT] ELSE 0 END) AS 'nduoa',
MAX(CASE [SOURCE] WHEN 'mumayi' THEN [COUNT] ELSE 0 END) AS 'mumayi',
MAX(CASE [SOURCE] WHEN 'mqidian' THEN [COUNT] ELSE 0 END) AS 'mqidian',
MAX(CASE [SOURCE] WHEN 'lenovomm' THEN [COUNT] ELSE 0 END) AS 'lenovomm',
MAX(CASE [SOURCE] WHEN 'eoemarket' THEN [COUNT] ELSE 0 END) AS 'eoemarket',
MAX(CASE [SOURCE] WHEN 'dbank' THEN [COUNT] ELSE 0 END) AS 'dbank',
MAX(CASE [SOURCE] WHEN '1xingdong' THEN [COUNT] ELSE 0 END) AS '1xingdong'
FROM [MyDataBase].[dbo].android_source
GROUP BY CONVERT(varchar(10), [CREATETIME],120)

结果:

数据库行列转换sql的更多相关文章

  1. (sql server)玩转-数据库行列转换

    虽然开发过程中没用过行列转换,但是听说面试时常常会遇到这个问题,以前在网上也看到过大神的例子,今天自己仔细的玩了下,希望和大家分享一下了. 注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦 ...

  2. SQL2005数据库行列转换

    注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦,全部是我自己写的,用到了系统的SysColumns (一)行转列的方法 先说说行转列的方法,这个就比较好想了,利用拼sql和case wh ...

  3. 最近整理的一些行列转换sql(有自己的,有别人的),留作记录

    --case when 经典用法SELECT * FROM        (SELECT 1 NUM,              '奖项金额',              SUM(CASE WHEN ...

  4. SqlServer2000下实现行列转换

    SqlServer2000下实现行列转换 2011-04-06 22:07:07|  分类: SQL Server |  标签:sqlserver  2000  行列转换  sql  |举报|字号 订 ...

  5. [数据库] SQL查询语句表行列转换及一行数据转换成两列

    原文来自:http://blog.csdn.net/Eastmount/article/details/50559008 本文主要讲述了SQL查询语句表之间的行列转换,同时也包括如何将一行数据转换成两 ...

  6. SQL Server中行列转换 Pivot UnPivot

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

  7. SQL行列转换:报表_公司采购表_每个公司各采购了些什么产品

    有同学问了个比较典型行列转换的问题,想想,解答如下:数据库有一张表: 是个公司采购表,想转化成如下报表,显示每个公司各采购了些什么产品: 哪些公司采购哪些产品是不确定的,所以报表的列有哪几项是不确定的 ...

  8. SQL行列转换6种方法

    在进行报表开发时,很多时候会遇到行列转换操作,很对开发人员针对于SQL级别行列转换操作一直不甚理解,今天正好抽空对其进行了一些简单的总结.这里主要列举3种可以实现SQL行列转换的方法,包括通用SQL解 ...

  9. SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

    SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...

随机推荐

  1. scp命令:服务器间远程复制代码

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  2. CSS-文本垂直居中

    文本水平居中可以将text-align设置为center即可,垂直居中的话如果是单纯的设置vertical-align是没办法单独设置成功的,垂直居中的文字分为单行文本和多行文本,主要是两种不同的实现 ...

  3. 插件化 VirtualAPK 简介 体验 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. javaScript:让文本框内的最后一个文字的后面获得焦点

    //当失去交点以后 让文本框内的文字获得焦点 并且光标移到最后一个字后面 function myfocus(myid) { if(isNav){ document.getElementById(myi ...

  5. 3分钟搞定Linux系统正则表达式

    正则表达式是一种字符模式,用于在查找过程中匹配制定的字符. 元字符通常在Linux中分为两类:Shell元字符,由Linux Shell进行解析:正则表达式元字符,由vi/grep/sed/awk等文 ...

  6. 如何把本地代码提交到git(码云)、github代码管理项目上

    前提必须安装了git工具 以下命令操作都是通过git bash操作. 将本地代码提交到码云空项目操作: D:\>mkdir inek_winprop D:\>cd inek_winprop ...

  7. apache 错误:The system cannot find the file specified.

    在启动apache时出现了以下错误信息 Window日志里也记录了此错误信息   而出现此错误的原因是IIS占用了80端口 停止IIS再重新启动apache即可解决   参考: cannot find ...

  8. virtualBox导入虚拟机启动报错

    今天使用Oracle VMbox在导入虚拟机后,启动时报了如下错误: A new node couldn't be inserted because one with the same name ex ...

  9. Intellij idea断点 Debugger slow: Method breakpoints my dramatically slow down debugging

    不知道点到哪里了,IDEA调试特别卡,而且总是如下提示, Debugger slow: Method breakpoints my dramatically slow down debugging 意 ...

  10. 使用Snap.svg类库实现的抖动式的幻灯播放效果

    在线演示 本地下载 这个幻灯中,使用了SVG来生成具有动画弧度的幻灯背景效果,如果你在项目中能够支持现代浏览器的话,尝试一下这个效果吧,很赞! 想了解基础使用,观看这个轻视频吧:Snap.svg处理和 ...