每次写交叉表就头疼,请大家帮忙 库存表pharmacy ID 药品编号 库存量 仓库 有效期 1 1 1 1 2009-11-12 2 1 3 1 2008-12-12 3 2 4 2 2008-12-12 药品表leechdom 编号 名称 规格 价格 1 abc abc 14 2 cde cdaf 12 仓库只有两个,要形成同一仓库的量的合计,像这样的结果 药品编号 名称 规格 价格 仓库1量 仓库2量 1 abc abc 14 4 0 2 cde cdaf 12 0 4
这个问题第1个回答:
SQL code
select a.编号,a.名称,a.规格,a.价格
sum(case when 仓库=1 then 库存量 else 0 end) 仓库1量,
sum(case when 仓库=2 then 库存量 else 0 end) 仓库2量
from leechdom a
left join pharmacy b
on a.编号=b.编号
group by a.编号,a.名称,a.规格,a.价格
这个问题第2个回答:
SQL code
declare @sql varchar(8000)
set @sql='select a.编号,a.名称,a.规格,a.价格'
select @sql=@sql+',sum(case when b.仓库='+ltrim(仓库)+' then b.库存量 else 0 end) [仓库'+ltrim(仓库)+']'
from (select distinct 仓库 from pharmacy) t
exec (@sql+' from leechdom a left join pharmacy b on a.编号=b.编号 group by a.编号,a.名称,a.规格,a.价格')
这个问题第3个回答:
SQL code
--> 测试数据: #pharmacy
if object_id('tempdb.dbo.#pharmacy') is not null drop table #pharmacy
create table #pharmacy (ID int,药品编号 int,库存量 int,仓库 int,有效期 datetime)
insert into #pharmacy
select 1,1,1,1,'2009-11-12' union all
select 2,1,3,1,'2008-12-12' union all
select 3,2,4,2,'2008-12-12'
--> 测试数据: #leechdom
if object_id('tempdb.dbo.#leechdom') is not null drop table #leechdom
create table #leechdom (编号 int,名称 varchar(3),规格 varchar(4),价格 int)
insert into #leechdom
select 1,'abc','abc',14 union all
select 2,'cde','cdaf',12
select
药品编号=a.编号,
名称=max(a.名称),
规格=max(a.规格),
价格=max(a.价格),
仓库1量=sum(case b.仓库 when 1 then 库存量 else 0 end),
仓库2量=sum(case b.仓库 when 2 then 库存量 else 0 end)
from #leechdom a
join #pharmacy b on a.编号=b.药品编号
group by a.编号
/*
药品编号 名称 规格 价格 仓库1量 仓库2量
----------- ---- ---- ----------- ----------- -----------
1 abc abc 14 4 0
2 cde cdaf 12 0 4
*/
这个问题第4个回答:
SQL code
create table pharmacy(ID int,药品编号 int,库存量 int,仓库 int,有效期 datetime)
insert into pharmacy select 1 , 1 , 1 , 1 , '2009-11-12'
insert into pharmacy select 2 , 1 , 3 , 1 , '2008-12-12'
insert into pharmacy select 3 , 2 , 4 , 2 , '2008-12-12'
create table leechdom(编号 int,名称 varchar(10),规格 varchar(10),价格 int)
insert into leechdom select 1 , 'abc', 'abc' , 14
insert into leechdom select 2 , 'cde', 'cdaf', 12
go
declare @sql varchar(8000)
set @sql='select a.编号,a.名称,a.规格,a.价格'
select @sql=@sql+',sum(case when b.仓库='+ltrim(仓库)+' then b.库存量 else 0 end) [仓库'+ltrim(仓库)+']'
from (select distinct 仓库 from pharmacy) t
exec (@sql+' from leechdom a left join pharmacy b on a.编号=b.药品编号 group by a.编号,a.名称,a.规格,a.价格')
go
drop table pharmacy,leechdom
/*
编号 名称 规格 价格 仓库1 仓库2
----------- ---------- ---------- ----------- ----------- -----------
1 abc abc 14 4 0
2 cde cdaf 12 0 4
*/
|
|
|