SqlServer经典行转列 讨论
use CubeDemo;
go
SET NOCOUNT ON
/*销售模块*/
ifOBJECT_ID(N'BusinessCommon_SaleModule',N'U') isnotnull
droptable BusinessCommon_SaleModule
go
createtable BusinessCommon_SaleModule
(
BCId intidentity(1,1) primarykeynotnull,
ShopId varchar(20) null, ---门店Id
ShopName nvarchar(50) null, ---门店名称
SaleCarCount intnull, --销售量
BCDate datetimenull--生成日期
)
go
insertinto BusinessCommon_SaleModule
select'MD001','广丰店',80,'2010-4-10'unionall
select'MD001','广丰店',20,'2010-5-25'unionall
select'MD001','广丰店',55,'2011-5-1'unionall
select'MD001','广丰店',48,'2011-5-11'unionall
select'MD001','广丰店',80,'2011-3-18'unionall
select'MD001','广丰店',10,'2011-3-12'unionall
select'MD001','广丰店',40,'2011-3-25'unionall
select'MD002','现代店',50,'2011-3-27'unionall
select'MD002','现代店',40,'2011-5-15'unionall
select'MD002','现代店',80,'2010-4-18'unionall
select'MD002','现代店',40,'2010-4-13'unionall
select'MD004','海马店',70,'2011-3-15'unionall
select'MD005','一丰店',80,'2010-4-10'unionall
select'MD005','一丰店',80,'2011-3-10'unionall
select'MD005','一丰店',80,'2011-5-22'unionall
select'MD003','宝马店',20,'2011-4-10'unionall
select'MD003','宝马店',80,'2010-8-10'
go
select*from BusinessCommon_SaleModule;
/* 如何根据条件 日 2011-4-18 动态查询到
2010年4月(从2010年4月1日到2010年4月18日的数据) 2011年1月(从2011年1月1日到2011年1月18日的数据)
2011年2月(从2011年2月1日到2011年2月18日的数据) 2011年3月(从2011年3月1日到2011年3月18日的数据)
2011年4月(从2011年4月1日到2011年4月18日的数据) 2011年累计(从2011年1月1日到2011年4月18日的数据)
2010年累计(从2010年1月1日到2010年4月18日的数据)
这些数据
*/
/* 要得到的结果如下:
门店名称 2010年4月 2011年1月 2011年2月 2011年3月 2011年4月 2011年累计 2010年累计
广丰店 80 0 0 90 0 130 80
现代店 120 0 0 0 0 50 120
宝马店 0 0 0 0 20 20 0
海马店 0 0 0 70 0 70 0
一丰店 80 0 0 80 0 80 80
*/
go
SET NOCOUNT ON
/*销售模块*/
ifOBJECT_ID(N'BusinessCommon_SaleModule',N'U') isnotnull
droptable BusinessCommon_SaleModule
go
createtable BusinessCommon_SaleModule
(
BCId intidentity(1,1) primarykeynotnull,
ShopId varchar(20) null, ---门店Id
ShopName nvarchar(50) null, ---门店名称
SaleCarCount intnull, --销售量
BCDate datetimenull--生成日期
)
go
insertinto BusinessCommon_SaleModule
select'MD001','广丰店',80,'2010-4-10'unionall
select'MD001','广丰店',20,'2010-5-25'unionall
select'MD001','广丰店',55,'2011-5-1'unionall
select'MD001','广丰店',48,'2011-5-11'unionall
select'MD001','广丰店',80,'2011-3-18'unionall
select'MD001','广丰店',10,'2011-3-12'unionall
select'MD001','广丰店',40,'2011-3-25'unionall
select'MD002','现代店',50,'2011-3-27'unionall
select'MD002','现代店',40,'2011-5-15'unionall
select'MD002','现代店',80,'2010-4-18'unionall
select'MD002','现代店',40,'2010-4-13'unionall
select'MD004','海马店',70,'2011-3-15'unionall
select'MD005','一丰店',80,'2010-4-10'unionall
select'MD005','一丰店',80,'2011-3-10'unionall
select'MD005','一丰店',80,'2011-5-22'unionall
select'MD003','宝马店',20,'2011-4-10'unionall
select'MD003','宝马店',80,'2010-8-10'
go
select*from BusinessCommon_SaleModule;
/* 如何根据条件 日 2011-4-18 动态查询到
2010年4月(从2010年4月1日到2010年4月18日的数据) 2011年1月(从2011年1月1日到2011年1月18日的数据)
2011年2月(从2011年2月1日到2011年2月18日的数据) 2011年3月(从2011年3月1日到2011年3月18日的数据)
2011年4月(从2011年4月1日到2011年4月18日的数据) 2011年累计(从2011年1月1日到2011年4月18日的数据)
2010年累计(从2010年1月1日到2010年4月18日的数据)
这些数据
*/
/* 要得到的结果如下:
门店名称 2010年4月 2011年1月 2011年2月 2011年3月 2011年4月 2011年累计 2010年累计
广丰店 80 0 0 90 0 130 80
现代店 120 0 0 0 0 50 120
宝马店 0 0 0 0 20 20 0
海马店 0 0 0 70 0 70 0
一丰店 80 0 0 80 0 80 80
*/