求一个SQL,没有数据也要显示出0,在线等,非常急!

cpw999cn 2008-04-02 10:59:39
A表:
物品 规格 库存
ob1 s11 10
ob1 s13 20
ob2 s21 15
ob2 s24 13
该表表示物品相应规格剩下的库存。
B表
物品 型号
ob1 M1
ob2 M2
该表表示物品属于何种型号,而每种型号又包含不同的规格。型号与规格的对应关系请看C表。
C表
型号 规格
M1 s11
M1 s12
M1 s13
M2 s21
M2 s22
M2 s23
M2 s24
M3 s31
M3 s32
该表表示每种型号包含了哪些规格。
希望得到的结果
物品 规格 库存
ob1 s11 10
ob1 s12 0
ob1 s13 20
ob2 s21 15
ob2 s22 0
ob2 s23 0
ob2 s24 13
列出有库存的所有物品,只要属于它的规格都应该列出来,有库存的显示库存,无库存则显示0
分不够可以再加!非常急,望高手指点!
...全文
531 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpw999cn 2008-04-02
  • 打赏
  • 举报
回复
结贴,感谢 ̄
bqb 2008-04-02
  • 打赏
  • 举报
回复
create table A(物品 varchar(10), 规格 varchar(10), 库存 int)
insert into A values('ob1', 's11', 10 )
insert into A values('ob1', 's13', 20 )
insert into A values('ob2', 's21', 15 )
insert into A values('ob2', 's24', 13 )
create table B(物品 varchar(10), 型号 varchar(10))
insert into B values('ob1', 'M1')
insert into B values('ob2', 'M2')
create table C(型号 varchar(10), 规格 varchar(10))
insert into C values('M1', 's11')
insert into C values('M1', 's12')
insert into C values('M1', 's13')
insert into C values('M2', 's21')
insert into C values('M2', 's22')
insert into C values('M2', 's23')
insert into C values('M2', 's24')
insert into C values('M3', 's31')
insert into C values('M3', 's32')
go


select t2.物品,t1.规格,isnull(t3.库存,0) 库存 from C t1
inner join B t2 on t1.型号=t2.型号
left join A t3 on t3.物品=t2.物品 and t3.规格=t1.规格

/*
物品 规格 库存
ob1 s11 10
ob1 s12 0
ob1 s13 20
ob2 s21 15
ob2 s22 0
ob2 s23 0
ob2 s24 13
*/

drop table a,b,c
dawugui 2008-04-02
  • 打赏
  • 举报
回复
create table A(物品 varchar(10), 规格 varchar(10), 库存 int)
insert into A values('ob1', 's11', 10 )
insert into A values('ob1', 's13', 20 )
insert into A values('ob2', 's21', 15 )
insert into A values('ob2', 's24', 13 )
create table B(物品 varchar(10), 型号 varchar(10))
insert into B values('ob1', 'M1')
insert into B values('ob2', 'M2')
create table C(型号 varchar(10), 规格 varchar(10))
insert into C values('M1', 's11')
insert into C values('M1', 's12')
insert into C values('M1', 's13')
insert into C values('M2', 's21')
insert into C values('M2', 's22')
insert into C values('M2', 's23')
insert into C values('M2', 's24')
insert into C values('M3', 's31')
insert into C values('M3', 's32')
go

select B.物品,C.规格 , isnull(A.库存, 0) 库存 from B
inner join C on B.型号 = c.型号
left join A on B.物品 = A.物品 and C.规格 = A.规格

drop table A,B,C

/*
物品 规格 库存
---------- ---------- -----------
ob1 s11 10
ob1 s12 0
ob1 s13 20
ob2 s21 15
ob2 s22 0
ob2 s23 0
ob2 s24 13

(7 行受影响)
*/


flairsky 2008-04-02
  • 打赏
  • 举报
回复
select b.物品,c.规格,isnull(a.库存,0) as 库存 from b inner join c on b.型号=c.型号 left join a on a.物品=b.物品 and a.规格=c.规格 order by b.物品,c.规格
叶子 2008-04-02
  • 打赏
  • 举报
回复
顶 isnull(A.库存, 0)
dawugui 2008-04-02
  • 打赏
  • 举报
回复
create table A(物品 varchar(10), 规格 varchar(10), 库存 int)
insert into A values('ob1', 's11', 10 )
insert into A values('ob1', 's13', 20 )
insert into A values('ob2', 's21', 15 )
insert into A values('ob2', 's24', 13 )
create table B(物品 varchar(10), 型号 varchar(10))
insert into B values('ob1', 'M1')
insert into B values('ob2', 'M2')
create table C(型号 varchar(10), 规格 varchar(10))
insert into C values('M1', 's11')
insert into C values('M1', 's12')
insert into C values('M1', 's13')
insert into C values('M2', 's21')
insert into C values('M2', 's22')
insert into C values('M2', 's23')
insert into C values('M2', 's24')
insert into C values('M3', 's31')
insert into C values('M3', 's32')
go

select m.* , isnull(A.库存, 0) 库存 from
(select B.物品,C.规格 from B,C where B.型号 = c.型号) m
left join A on m.物品 = A.物品 and m.规格 = A.规格

drop table A,B,C

/*
物品 规格 库存
---------- ---------- -----------
ob1 s11 10
ob1 s12 0
ob1 s13 20
ob2 s21 15
ob2 s22 0
ob2 s23 0
ob2 s24 13

(7 行受影响)
*/


liangCK 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dawugui 的回复:]
SQL codeselect m.* , left(A.库存, 0) 库存 from
(select B.物品,C.规格 from B,C where B.型号 = c.型号) m
left join A on m.物品 = A.物品 and m.规格 = A.规格
[/Quote]
dawugui 2008-04-02
  • 打赏
  • 举报
回复
select m.* , left(A.库存, 0) 库存 from
(select B.物品,C.规格 from B,C where B.型号 = c.型号) m
left join A on m.物品 = A.物品 and m.规格 = A.规格
昵称被占用了 2008-04-02
  • 打赏
  • 举报
回复
加个排序

select b.物品,c.规格,isnull(a.库存,0) as 库存 
from b inner join c on b.型号=c.型号
left join a on a.物品=b.物品 and a.规格=c.规格
order by b.物品,c.规格
昵称被占用了 2008-04-02
  • 打赏
  • 举报
回复
select b.物品,c.规格,isnull(a.库存,0) as 库存 
from b inner join c on b.型号=c.型号
left join a on a.物品=b.物品 and a.规格=c.规格
cpw999cn 2008-04-02
  • 打赏
  • 举报
回复
自己顶一下 ̄

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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