34,587
社区成员
发帖
与我相关
我的任务
分享
create table 商品表
(商品ID int,商品名称 varchar(10))
insert into 商品表
select 101,'花生' union all
select 102,'啤酒'
create table 仓库表
(仓库ID int,仓库名称 varchar(10))
insert into 仓库表
select 201,'仓1' union all
select 202,'仓2 '
create table 库存表
(商品ID int,仓库ID int,商品数量 int)
insert into 库存表
select 101,201,100 union all
select 101,202,50 union all
select 102,201,80
declare @tsql varchar(6000)
select @tsql=isnull(@tsql+',','')
+'sum(case when 仓库名称='''+仓库名称+''' then 商品数量 else 0 end) '''+仓库名称+'数'' '
from 仓库表
select @tsql='
select 商品ID,
商品名称,'+@tsql+',
sum(商品数量) ''合计''
from
(select a.商品ID,c.商品名称,b.仓库名称,a.商品数量
from 库存表 a
inner join 仓库表 b on a.仓库ID=b.仓库ID
inner join 商品表 c on a.商品ID=c.商品ID) a
group by 商品ID,商品名称 '
exec(@tsql)
/*
商品ID 商品名称 仓1数 仓2数 合计
----------- ---------- ----------- ----------- -----------
101 花生 100 50 150
102 啤酒 80 0 80
(2 row(s) affected)
*/
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-05-26 17:37:39
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
----> 测试数据[商品表]
--if object_id('商品表') is not null drop table 商品表
--go
--create table 商品表([商品ID] int,[商品名称] nvarchar(4))
--insert 商品表
--select 101,N'花生' union all
--select 102,N'啤酒'
----> 测试数据[仓库表]
--if object_id('仓库表') is not null drop table 仓库表
--go
--create table 仓库表([仓库ID] int,[仓库名称] nvarchar(4))
--insert 仓库表
--select 201,N'仓1' union all
--select 202,N'仓2'
----> 测试数据[库存表]
--if object_id('库存表') is not null drop table 库存表
--go
--create table 库存表([商品ID] int,[仓库ID] int,[商品数量] int)
--insert 库存表
--select 101,201,100 union all
--select 101,202,50 union all
--select 102,201,80
--------------生成数据--------------------------
IF OBJECT_ID('TempDB..#t','u')IS NOT NULL
DROP TABLE #t
select c.商品ID ,c.商品名称,b.仓库名称,a.商品数量 INTO #t
from 库存表 a INNER JOIN 仓库表 b ON a.仓库ID=b.仓库ID
INNER JOIN 商品表 c ON a.商品ID=c.商品ID
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(仓库名称)+N'=sum(case when [仓库名称]=N'+quotename(仓库名称,'''')+N' then [商品数量] else 0 end)'
from #t group by 仓库名称
exec(N'select [商品ID],商品名称'+@s+N',[合计]=sum(商品数量) from #t group by [商品ID],商品名称 order by 商品ID')
----------------结果----------------------------
/*
商品ID 商品名称 仓1 仓2 合计
----------- ---- ----------- ----------- -----------
101 花生 100 50 150
102 啤酒 80 0 80
*/