行转列与CASE.....WHEN...

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for tabname
-- ----------------------------
DROP TABLE IF EXISTS `tabname`;
CREATE TABLE `tabname` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  `Date` date DEFAULT NULL,
  `Scount` int(11) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tabname
-- ----------------------------
INSERT INTO `tabname` VALUES (‘1‘, ‘小说‘, ‘2013-09-01‘, ‘10000‘);
INSERT INTO `tabname` VALUES (‘2‘, ‘微信‘, ‘2013-09-01‘, ‘20000‘);
INSERT INTO `tabname` VALUES (‘3‘, ‘小说‘, ‘2013-09-02‘, ‘30000‘);
INSERT INTO `tabname` VALUES (‘4‘, ‘微信‘, ‘2013-09-02‘, ‘35000‘);
INSERT INTO `tabname` VALUES (‘5‘, ‘小说‘, ‘2013-09-03‘, ‘31000‘);
INSERT INTO `tabname` VALUES (‘6‘, ‘微信‘, ‘2013-09-03‘, ‘36000‘);
INSERT INTO `tabname` VALUES (‘7‘, ‘小说‘, ‘2013-09-04‘, ‘35000‘);
INSERT INTO `tabname` VALUES (‘8‘, ‘微信‘, ‘2013-09-04‘, ‘38000‘);
INSERT INTO `tabname` VALUES (‘9‘, ‘微信‘, ‘2013-09-01‘, ‘30000‘);

查询结果:

id   Name   Date          Scount1    小说    2013-09-01    10000
2    微信    2013-09-01    20000
3    小说    2013-09-02    30000
4    微信    2013-09-02    35000
5    小说    2013-09-03    31000
6    微信    2013-09-03    36000
7    小说    2013-09-04    35000
8    微信    2013-09-04    38000
9    微信    2013-09-01    30000

执行:

SELECT
CASE NAME WHEN ‘小说‘ THEN Scount ELSE 0 END  小说,
CASE NAME WHEN ‘微信‘ THEN Scount ELSE 0 END  微信
FROM TabName
where Date=‘2013-09-01‘

得到:

小说       微信
10000     0
0        20000
0        30000

执行:

SELECT
SUM(CASE NAME WHEN ‘小说‘ THEN Scount ELSE 0 END ) 小说,
SUM(CASE NAME WHEN ‘微信‘ THEN Scount ELSE 0 END ) 微信
FROM TabName
where Date=‘2013-09-01‘

得到:

小说      微信
10000    50000

执行:

SELECT Date ,
SUM(CASE NAME WHEN ‘小说‘ THEN Scount ELSE 0 END ) 小说,
SUM(CASE NAME WHEN ‘微信‘ THEN Scount ELSE 0 END ) 微信
FROM TabName
GROUP BY Date

得到:

Date      小说    微信2013-09-01    10000    50000
2013-09-02    30000    35000
2013-09-03    31000    36000
2013-09-04    35000    38000
时间: 2024-11-05 12:28:13

行转列与CASE.....WHEN...的相关文章

mysql行转列利用case when

CREATE TABLE bill ( id CHAR(36) NOT NULL, customer INT(255) NULL DEFAULT NULL COMMENT '顾客', shop INT(255) NULL DEFAULT NULL COMMENT '消费店铺', money DECIMAL(10,2) NULL DEFAULT NULL COMMENT '花费', type INT(255) NULL DEFAULT NULL COMMENT '类型 0', PRIMARY KE

SQL Fundamentals SQL列字段的处理 SQL(case、decode、行转列)

列字段的处理 SQL Case 对列做处理 SQL> select deptno,sum(sal) from emp group by deptno; Select case when deptno=10 then 'ACCOUNTING' when deptno=20 then 'RESERCH' when deptno=30 then 'SALES' end, sum(sal) from emp group by deptno 列字段的处理 SQL Decode 还有一种情况是当什么都不是的

sql与oracle中有关case和decode的用法(行转列)及比较(转

引: 为了举例说明,这里创建了一张成绩表,如下图所示: 比较: 1.sql中,这两个函数我们仅能使用case,代码及结果如下: select name,       case Subject          when '语文' then 1          when '数学' then 2          when '英语' then 3   --else 3       end  as '科目代码'   from Results 同样的,我们可以用case实现行转列,代码及结果如下: s

行转列、列转行

一:行转列 模式:N行转一列  本实验N取31.建表SQL> create table grade(id int,name varchar2(10),subject varchar2(10),grade number(3));2.插入实验数据insert into grade values(1,'Andy','Yuwen',11);insert into grade values(2,'Andy','Math',22);insert into grade values(3,'Andy','Eng

SQL Server 行转列

语法: PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table

SQLServer处理行转列和列转行

掌握SQL Server 行转列和列转行 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例 WITH T AS ( SELECT 1 as TeamId,'测试团队1' as Team,80 'MEN',20

做图表统计你需要掌握SQL Server 行转列和列转行

说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成前端图表需要的数据源,但是程序里又需要把该数据经过列转行写入中间表中,下次再查询该数据时直接从中间表查询数据. 1.1 列换行语法 table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) ) 1.2  行转列案例

SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL,动态列字段: 方法三:使用PIVOT关系运算符,静态列字段: 方法四:使用PIVOT关系运算符,动态列字段: 扩展阅读一:参数化表名.分组列.行转列字段.字段值: 扩展阅读二:在前面的基础上加入条件过滤: 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的

SQL 行变列 列变行

--创建Table create table student(name varchar(50),course varchar(50),score int) insert into student values('張三','語文',80) insert into student values('張三','數學',76) insert into student values('張三','物理',90) insert into student values('李四','語文',73) insert i