较复杂的SQL语句问题
表1商品编号,商品名称 , 规格
001 牙膏 1*10
002 橡皮 1*20
表二
仓库编号 , 商品编号 , 库存数量
01 001 2
02 002 10
表3
仓库编号 仓库名称
01 主仓库
02 二楼仓库
我想用一条SQL语句,查询如下:
商品编号 商品名称 主仓库 二楼仓库
001 牙膏 2 0
002 橡皮 0 10
帮帮忙。。。请写下完整的SQL语句 谢谢 --------------------编程问答-------------------- sf --------------------编程问答-------------------- 参考:http://topic.csdn.net/u/20070629/06/9e048ebe-c0e3-4578-8ef7-78f1269a6a97.html --------------------编程问答-------------------- 如果是只有两个仓库,直接写比较简单
--------------------编程问答--------------------
declare @t1 table (商品编号 varchar(10), 商品名称 varchar(20))
insert @t1
select '001', '牙膏' union
select '002', '橡皮'
declare @t2 table (仓库编号 varchar(10), 商品编号 varchar(10), 库存数量 int)
insert @t2
select '01', '001', 2 union
select '02', '002', 10
declare @t3 table (仓库编号 varchar(10), 仓库名称 varchar(20))
insert @t3
select '01', '主仓库' union
select '02', '二楼仓库'
select a.商品编号, a.商品名称, isnull(b.主仓库,0) as 主仓库, isnull(c.二楼仓库,0) as 二楼仓库
from @t1 a
left join
(
select 商品编号, 库存数量 as 主仓库
from @t2
where 仓库编号='01'
) b on a.商品编号 = b.商品编号
left join
(
select 商品编号, 库存数量 as 二楼仓库
from @t2
where 仓库编号='02'
) c on a.商品编号 = c.商品编号
商品编号 商品名称 主仓库 二楼仓库
---------- -------------------- ----------- -----------
001 牙膏 2 0
002 橡皮 0 10
正解 --------------------编程问答-------------------- 参考
精典的SQL语句(行列转换等)
http://zjt.nbfas.cn/show.aspx?id=16&cid=8
1. 行列转换--普通
假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)
主要是要把表3仓库基础表进行行列转换然后去join库存表和商品目录表
--------------------编程问答-------------------- ...原理去SQL Server那边 多的是.晕. --------------------编程问答--------------------
这个写得很不错了. --------------------编程问答--------------------
declare @t1 table (商品编号 varchar(10), 商品名称 varchar(20))--------------------编程问答-------------------- 顶起来,友情UP --------------------编程问答-------------------- 帮顶
insert @t1
select '001', '牙膏' union
select '002', '橡皮'
declare @t2 table (仓库编号 varchar(10), 商品编号 varchar(10), 库存数量 int)
insert @t2
select '01', '001', 2 union
select '02', '002', 10
declare @t3 table (仓库编号 varchar(10), 仓库名称 varchar(20))
insert @t3
select '01', '主仓库' union
select '02', '二楼仓库'
---2000静态SQL
select 商品编号,商品名称,
主仓库=sum(case 仓库名称 when '主仓库' then 库存数量 else 0 end),
二楼仓库=sum(case 仓库名称 when '二楼仓库' then 库存数量 else 0 end)
from
(select a.商品编号,a.商品名称,b.库存数量,c.仓库名称
from @t1 a join @t2 b on a.商品编号=b.商品编号 join @t3 c
on b.仓库编号=c.仓库编号) t
group by 商品编号,商品名称
--2005静态SQL
select 商品编号,商品名称,主仓库=ISNULL(主仓库,0),二楼仓库=ISNULL(二楼仓库,0)
from
(select * from
(select a.商品编号,a.商品名称,b.库存数量,c.仓库名称 from @t1 a join @t2 b on a.商品编号=b.商品编号 join @t3 c on b.仓库编号=c.仓库编号) a
pivot(sum(库存数量) for 仓库名称 in(主仓库,二楼仓库)) b
) t
/*
商品编号 商品名称 主仓库 二楼仓库
---------- -------------------- ----------- -----------
001 牙膏 2 0
002 橡皮 0 10
*/
答案3楼 --------------------编程问答-------------------- 我的答案和3楼的一样! --------------------编程问答--------------------
补充:.NET技术 , C#