SqlServer经典行转列 讨论

use CubeDemo;
go
SET NOCOUNT ON
/* 销售模块 */
if OBJECT_ID (N ' BusinessCommon_SaleModule ' ,N ' U ' ) is not null
drop table BusinessCommon_SaleModule
go
create table BusinessCommon_SaleModule
(
BCId
int identity ( 1 , 1 ) primary key not null ,
ShopId
varchar ( 20 ) null , -- -门店Id
ShopName nvarchar ( 50 ) null , -- -门店名称
SaleCarCount int null , -- 销售量
BCDate datetime null -- 生成日期
)
go

insert into BusinessCommon_SaleModule
select ' MD001 ' , ' 广丰店 ' , 80 , ' 2010-4-10 ' union all
select ' MD001 ' , ' 广丰店 ' , 20 , ' 2010-5-25 ' union all
select ' MD001 ' , ' 广丰店 ' , 55 , ' 2011-5-1 ' union all
select ' MD001 ' , ' 广丰店 ' , 48 , ' 2011-5-11 ' union all
select ' MD001 ' , ' 广丰店 ' , 80 , ' 2011-3-18 ' union all
select ' MD001 ' , ' 广丰店 ' , 10 , ' 2011-3-12 ' union all
select ' MD001 ' , ' 广丰店 ' , 40 , ' 2011-3-25 ' union all

select ' MD002 ' , ' 现代店 ' , 50 , ' 2011-3-27 ' union all
select ' MD002 ' , ' 现代店 ' , 40 , ' 2011-5-15 ' union all
select ' MD002 ' , ' 现代店 ' , 80 , ' 2010-4-18 ' union all
select ' MD002 ' , ' 现代店 ' , 40 , ' 2010-4-13 ' union all


select ' MD004 ' , ' 海马店 ' , 70 , ' 2011-3-15 ' union all

select ' MD005 ' , ' 一丰店 ' , 80 , ' 2010-4-10 ' union all
select ' MD005 ' , ' 一丰店 ' , 80 , ' 2011-3-10 ' union all
select ' MD005 ' , ' 一丰店 ' , 80 , ' 2011-5-22 ' union all


select ' MD003 ' , ' 宝马店 ' , 20 , ' 2011-4-10 ' union all
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
*/

你可能感兴趣的:(sqlserver)