一,案列问题描述: 某销售系统中,注册的用户会在随后的月份中购物下单,需要按月统计注册的用户中各个月下单的金额.源数据表如下: FM::注册月份,CM: 下单月份, AMT:下单金额 期望得到如下统计结果: 在该案列中,随着时间变化,下单月份的值是不断变化的,因此在行列转置中,需要能够满足其动态变化的要求: 二,准备测试数据 CREATE TABLE TEST_PIVOT_DYNAMIC_COLUMN ( FM DATE, CM DATE, AMT NUMBER ) ; INSERT INTO
在网上看到一篇关于case when语句的博客,写得很好,我这里是摘录的,还有我的一些体会,原博客地址:SQL Case when 的使用方法. Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END
sql case when 多条件 小结 -- 第一种 格式 : 简单Case函数 : -- 格式说明 -- case 列名 -- when 条件值1 then 选择项1 -- when 条件值2 then 选项2....... -- else 默认值 end --例子: SELECT `cus`.`cus_name`, `cus`.`company_name`, `cus`.`reg_mobile`, `r`.`region_name`, CASE `cus`.`cus_statu` WHEN
原始数据如下图所示:(商品的销售明细)date=业务日期:Item=商品名称:saleqty=销售数量: -- 建立测试数据(表)create table test (Date varchar(10), item char(10),saleqty int)insert test values('2010-01-01','AAA',8)insert test values('2010-01-02','AAA',4)insert test values('2010-01-03','AAA',5)in
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_sou
),),[Score] int) Insert Class union all union all union all union all union all union all union all Go --2000方法: 动态: ) set @s='' Select @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)' from
将表1转化成表2: 表1 表2 得到表2的结果,需要经过多次pivot转换,再经union连接到一起,代码如下: ] from ( select 'a' as type, * from Table_1 pivot(])) as a union all select 'b' as type,* from Table_1 pivot(])) as b union all select 'c' as type,* from Table_1 pivot(])) as c union all select
可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) )2.UnPivot介绍UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现 完整语法: table_source UNPIVOT( value_column FO