一,案列问题描述: 某销售系统中,注册的用户会在随后的月份中购物下单,需要按月统计注册的用户中各个月下单的金额.源数据表如下: FM::注册月份,CM: 下单月份, AMT:下单金额 期望得到如下统计结果: 在该案列中,随着时间变化,下单月份的值是不断变化的,因此在行列转置中,需要能够满足其动态变化的要求: 二,准备测试数据 CREATE TABLE TEST_PIVOT_DYNAMIC_COLUMN ( FM DATE, CM DATE, AMT NUMBER ) ; INSERT INTO
将表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
原始数据如下图所示:(商品的销售明细)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
),),[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
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