select 日期,
[1号库]=sum(case when 仓库=N'1号库' then 数量 else 0 end),
[2号库]=sum(case when 仓库=N'2号库' then 数量 else 0 end),
[3号库]=sum(case when 仓库=N'3号库' then 数量 else 0 end),
[4号库]=sum(case when 仓库=N'4号库' then 数量 else 0 end),
[5号库]=sum(case when 仓库=N'5号库' then 数量 else 0 end)
from(
select 日期,仓库=导出库,数量=-数量 from a
union all
select 日期,仓库=导入库,数量=数量 from a
)a group by 日期
[1号库]=sum(case when 仓库=N'1号库' then 数量 else 0 end),
[2号库]=sum(case when 仓库=N'2号库' then 数量 else 0 end),
[3号库]=sum(case when 仓库=N'3号库' then 数量 else 0 end),
[4号库]=sum(case when 仓库=N'4号库' then 数量 else 0 end),
[5号库]=sum(case when 仓库=N'5号库' then 数量 else 0 end)
from(
select 日期,仓库=导出库,数量=-数量 from a
union all
select 日期,仓库=导入库,数量=数量 from a
)a group by 日期
set @s=''
select @s=@s+N','+quotename(仓库)+N'=sum(case when 仓库=N'+quotename(仓库,N'''')+' then 数量 else 0 end)'
from(
select 导入库 from a
union
select 导出库 from a
)aa
exec(N'
select 日期'+@s+N'
from(
select 日期,仓库=导出库,数量=-数量 from a
union all
select 日期,仓库=导入库,数量=数量 from a
)a group by 日期')
,sum(case when 仓库=N'1号库' then 数量 else 0 end) as '1号库',
,sum(case when 仓库=N'2号库' then 数量 else 0 end) as '2号库'
,sum(case when 仓库=N'3号库' then 数量 else 0 end) as '3号库'
,sum(case when 仓库=N'4号库' then 数量 else 0 end) as '4号库'
,sum(case when 仓库=N'5号库' then 数量 else 0 end) as '5号库'
from(
select 日期,仓库=导出库,数量=-数量 from a
union all
select 日期,仓库=导入库,数量=数量 from a
)t
group by 日期
1号库=sum(case when 导出库='1号库' then -数量
when 导入库='1号库' then 数量 end)
2号库=sum(case when 导出库='2号库' then -数量
when 导入库='2号库' then 数量 end)
3号库=sum(case when 导出库='3号库' then -数量
when 导入库='3号库' then 数量 end)
4号库=sum(case when 导出库='4号库' then -数量
when 导入库='4号库' then 数量 end)
5号库=sum(case when 导出库='5号库' then -数量
when 导入库='5号库' then 数量 end)
from tba group by 日期
create table AT (编号 int ,导出库 varchar(10),导入库 varchar(10),数量 int ,日期 varchar(20))
insert into AT select 1,'1号库','2号库',10,'2005-06-09'
union all select 2,'1号库','3号库',15,'2005-09-09'
union all select 2,'4号库','5号库',20,'2005-11-09'--动态SQL
declare @s varchar(2000)
set @s='SELECT 日期'
select @s=@s+',['+库号+']=case when 导出库='''+库号+''' then -数量
when 导入库='''+库号+''' then 数量 end'
from
( select 导出库 as 库号 from AT
union
select 导入库 as 库号 from AT
)A
set @s=@s+' From AT '
exec(@s)--结果
日期 1号库 2号库 3号库 4号库 5号库
-------------------- ----------- ----------- ----------- ----------- -----------
2005-06-09 -10 10 NULL NULL NULL
2005-09-09 -15 NULL 15 NULL NULL
2005-11-09 NULL NULL NULL -20 20
--删除测试环境
Drop table [AT]
---------------------------------------
我想按日期分组并汇总数量,如果一个仓库有进有出的话就不能直接用sum,我想直观的反应出每个仓库的纯调出量和纯调出量。
-------------------------
动态设置时提示仓库名无效
insert into #T select 1,'1号库','2号库',10,'2005-06-09'
insert into #T select 2,'1号库','3号库',15,'2005-09-09'
insert into #T select 2,'4号库','5号库',20,'2005-11-09'select
日期,
[1号库] = (case '1号库' when 导出库 then -数量 when 导入库 then 数量 end),
[2号库] = (case '2号库' when 导出库 then -数量 when 导入库 then 数量 end),
[3号库] = (case '3号库' when 导出库 then -数量 when 导入库 then 数量 end),
[4号库] = (case '4号库' when 导出库 then -数量 when 导入库 then 数量 end),
[5号库] = (case '5号库' when 导出库 then -数量 when 导入库 then 数量 end)
from
#T
order by
日期
[create] table a
(编号 int,导出库 varchar(20),导入库 varchar(20),数量 int,日期 datetime)insert into a
select 1,'1号库','2号库',10,'2005-06-09' [union]
select 2,'1号库','3号库',15,'2005-09-09' [union]
select 2,'4号库','5号库',20,'2005-11-09'declare @s varchar(2000)select @s=''
select @s= @s+','+quotename(仓库)+'=sum(case when 仓库='''+仓库+''' then 数量 else 0 end)'
from
(select 仓库=导入库 from a
[union]
select 仓库=导出库 from a
) aa
exec('select 日期'+@s+' from
(select 日期,仓库=导入库,数量=-数量 from a
[union]
select 日期,仓库=导出库,数量=数量 from a
) aa
group by 日期')有时候真搞不懂,为什么我不把[create]和[union]打上括号就传不上来呢??
set @s=''
select @s=@s+N','+quotename(仓库)+N'=sum(case when 仓库=N'+quotename(仓库,N'''')+' then 数量 else 0 end)'
from(
select 导入库 as 仓库 from a --这里忘记指定别名了
union
select 导出库 from a
)aa
exec(N'
select 日期'+@s+N'
from(
select 日期,仓库=导出库,数量=-数量 from a
union all
select 日期,仓库=导入库,数量=数量 from a
)a group by 日期')
能不能顺便帮小弟解答以下问题啊...
http://community.csdn.net/Expert/topic/4287/4287987.xml?temp=.4798242