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

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. frp错误处理:login to server failed: authorization failed

    frp使用过程中会出现各种错误信息,有些朋友不太清楚,打算记录一些常见的错误返回代码,这里介绍一下frpc客户端[W] [control.go:111] login to server failed: ...

  2. STM32启动文件深度解析

    STM32启动过程全面解析,包括启动过程的介绍.启动代码的陈列以及深入解析.相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化.ARM7/ARM9 ...

  3. 用 .NET Memory Profiler 跟踪.net 应用内存使用情况--基本应用篇(转)

    .net 框架号称永远不会发生内存泄漏,原因是其引入了内存回收的机制.但实际应用中,往往我们分配了对象但没有释放指向该对象的引用,导致对象永远无法释放.最 常见的情况就是给对象添加了事件处理函数,但当 ...

  4. Valid Palindrome leetcode java

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

  5. 命令行修改mysql密码和远程访问

    http://jingyan.baidu.com/article/a3a3f8118cea488da2eb8a0a.html

  6. ubuntu忘记root密码 的解决方法

    alt+f2,在弹出的运行窗口中输入:gnome-terminal,回车. 即进入终端 输入:sudo passwd root,回车后会提示你输入你当前用户的密码 之后 按提示输入两次root的密码( ...

  7. 学界 | Yann LeCun新作,中日韩文本分类到底要用哪种编码?

    https://www.wxwenku.com/d/102093756 AI科技评论按:前几天,Yann LeCun与其学生 张翔在arXiv上发表了一篇新作「Which Encoding is th ...

  8. AI-终极算法-神经网络(连结学派)

  9. Linux系统下对NFS服务安全加固的方法

    NFS(Network File System)是 FreeBSD 支持的一种文件系统,它允许网络中的计算机之间通过 TCP/IP 网络共享资源.不正确的配置和使用 NFS,会带来安全问题. 概述 N ...

  10. Material Design学习之 ProgreesBar

    转载奇怪注明出处:王亟亟的大牛之路 继续我们Material Design的内容,这一篇讲的是进度条,上一篇是Switch地址例如以下:http://blog.csdn.net/ddwhan0123/ ...