求一3表查询 其中一表行转列

lu仙深 2014-05-26 05:34:22




商品表
商品ID 商品名称
101 花生
102 啤酒

仓库表 仓库会添加的
仓库ID 仓库名称
201 仓1
202 仓2

库存表
商品ID 仓库ID 商品数量
101 201 100
101 202 50
102 201 80

库存表
商品ID 商品名称 仓1数 仓2数 合计
101 花生 100 50 150
102 啤酒 80 0 80


求高手,以及过路的大侠,帮帮忙
谢谢
...全文
85 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lu仙深 2014-08-05
  • 打赏
  • 举报
回复
发现一个问题,没有库存的,就无法显示
lu仙深 2014-08-05
  • 打赏
  • 举报
回复
试下,结贴了还能回复不
lu仙深 2014-05-26
  • 打赏
  • 举报
回复
小弟今天有幸遇见2位版主为我解围,非常感谢 好好感动
唐诗三百首 2014-05-26
  • 打赏
  • 举报
回复

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)
*/
發糞塗牆 2014-05-26
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- 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
 
*/
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。 PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。 事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。 本课程作为PostgreSQL数据库管理一,主要讲解以下内容:1.     PostgreSQL安装和环境准备2.     PostgreSQL数据查询3.     PostgreSQL 数据过滤4.     PostgreSQL 多的联接5.     PostgreSQL数据的分组6.     PostgreSQL合集的操作7.   PostgreSQL 合集的分组

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧