求个SQL语句的写法!!谢谢!

eaqpi 2018-06-02 04:48:54

货品表
---------
ID 货物名称 品牌
1 电冰箱 海尔
2 电视机 海尔
3 电脑 海尔
4 收音机 海尔
5 电冰箱 苏泊尔
6 电视机 苏泊尔
7 电脑 苏泊尔
8 收音机 苏泊尔

销售表
----------------------
货品ID 销售数 退货数
2 1 1
3 44 2
5 12 8
4 12
1 5
1 77 16
3 22 9


采购表
---------------------
货品ID 采购数 退货数
1 100 7
3 50
5 60 5
2 22
4 15
4 8
2 1
3 55


求---
库存表
------------------------
ID 品牌 名称 库存数
(采购数-退货数)-(销售数-退货数)




...全文
1519 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-06-18
  • 打赏
  • 举报
回复
引用 10 楼 oNiShiHuaiDan 的回复:
select ID,货品名称,品牌,sum(数量) from (select id,货品名称,品牌 ,(采购数量-退货数量) as 数量 from 采购表 union all select id,货品名称,品牌,(销售数量-退货数量) from 销售表) as t1 group by id,货品名称,品牌 这样比left join 哪个效率高? 当然了(上面的isnull我没判断)一般我设置表是,数字的默认都是0,不会有NULL字符问题。 我是小白,请大神帮解答一下。
你这样的效率应该是比需要进行关联的高。但是采购表和销售表中没有记录货品名称和品牌,那不就没法得到应有的结果了,谈论又有什么意义呢。反之,如果采购表和销售表中直接记录了货名和品牌,那这个表结构的设计就值得商榷了。
oNiShiHuaiDan 2018-06-18
  • 打赏
  • 举报
回复
select ID,货品名称,品牌,sum(数量) from (select id,货品名称,品牌 ,(采购数量-退货数量) as 数量 from 采购表 union all select id,货品名称,品牌,(销售数量-退货数量) from 销售表) as t1 group by id,货品名称,品牌 这样比left join 哪个效率高? 当然了(上面的isnull我没判断)一般我设置表是,数字的默认都是0,不会有NULL字符问题。 我是小白,请大神帮解答一下。
oNiShiHuaiDan 2018-06-18
  • 打赏
  • 举报
回复
以基础表为基准左右关联采购表和销售表,应该是没问题的。 (有进出数据,肯定有基础表) 我的疑问是。如果我全部用连接,以采购表最为进,销售表作为出。 这样得出库存。会不会更有效率?
SRCS000 2018-06-13
  • 打赏
  • 举报
回复
select H.ID ,H.品牌,H.名称, ISNULL(X.库存数,0) AS 库存数 FROM 货物表 AS H LEFT JION ( SELECT X.货物ID AS ID ,(SUM(ISNULL(C.采购数,0))-SUM(ISNULL(C.退货数,0)))-((SUM(ISNULL(X.销售数,0))+SUM(ISNULL(X.退货数,0))) AS FROM 采购表AS C LEFT JOIN 销售表AS X ON C.货物ID=X.货物ID GROUP BY ) AS X ON H.ID=X.ID
SRCS000 2018-06-13
  • 打赏
  • 举报
回复
select H.ID ,H.品牌,H.名称, ISNULL(X.库存数,0) AS 库存数 FROM 货物表 AS H LEFT JION ( SELECT X.货物ID AS ID ,(C.采购数-C.退货数)-(X.销售数+X.退货数) AS FROM 采购表AS C LEFT JOIN 销售表AS X ON C.货物ID=X.货物ID ) AS X ON H.ID=X.ID
shinger126 2018-06-13
  • 打赏
  • 举报
回复
;WITH t AS (SELECT 货品ID,仓库,-1*(销售数 - ISNULL(退货数,0)) 数量 FROM 销售表 UNION ALL SELECT 货品ID,仓库,采购数 - ISNULL(退货数,0) 数量 FROM 采购表 ) SELECT 品牌,货物名称,仓库,SUM(数量) 数量 FROM t,货品表 WHERE t.货品ID=货品表.货品ID GROUP BY 货品ID,仓库 别用什么左关联右关联的,因为有些货物可能有销售记录,但是没有采购记录,这在实际业务中是很可能存在的.比方说采购时串货了
chenjiecao123 2018-06-05
  • 打赏
  • 举报
回复
SELECT p.ID,p.品牌,p.货物名称,T.D FROM Test1.dbo.products AS p LEFT JOIN ( SELECT pruchase.id,(pruchase.pur-sales.sale) AS D FROM ( SELECT p.货品ID as id,SUM(ISNULL(p.采购数,0)-ISNULL(p.退货数,0)) as pur FROM dbo.purchase as p GROUP BY p.货品ID) as pruchase LEFT JOIN ( SELECT s.货品ID as id,SUM(ISNULL(s.销售数,0)-ISNULL(s.退货数,0)) as sale FROM dbo.sale as s GROUP BY s.货品ID ) AS sales ON pruchase.id = sales.id ) AS T ON p.ID=T.id
二月十六 版主 2018-06-02
  • 打赏
  • 举报
回复
引用 2 楼 eaqpi 的回复:
感谢!!自己拼了半天,弄了一堆的错误!!现在看的基本明白! 麻烦再问一下,如果分仓应该怎么处理呢,比如收货的时候,入A仓B仓,出货的时候也有A仓B仓。。 一点头路都没有啊!
分组统计的时候加上仓库,然后在进行关联的时候仓库也作为关联条件
eaqpi 2018-06-02
  • 打赏
  • 举报
回复
感谢!!自己拼了半天,弄了一堆的错误!!现在看的基本明白! 麻烦再问一下,如果分仓应该怎么处理呢,比如收货的时候,入A仓B仓,出货的时候也有A仓B仓。。 一点头路都没有啊!
二月十六 版主 2018-06-02
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#货品表') is null
drop table #货品表
Go
Create table #货品表([ID] int,[货物名称] nvarchar(23),[品牌] nvarchar(23))
Insert #货品表
select 1,N'电冰箱',N'海尔' union all
select 2,N'电视机',N'海尔' union all
select 3,N'电脑',N'海尔' union all
select 4,N'收音机',N'海尔' union all
select 5,N'电冰箱',N'苏泊尔' union all
select 6,N'电视机',N'苏泊尔' union all
select 7,N'电脑',N'苏泊尔' union all
select 8,N'收音机',N'苏泊尔'
GO
if not object_id(N'Tempdb..#销售表') is null
drop table #销售表
Go
Create table #销售表([货品ID] int,[销售数] int,[退货数] int)
Insert #销售表
select 2,1,1 union all
select 3,44,2 union all
select 5,12,8 union all
select 4,12,null union all
select 1,5,null union all
select 1,77,16 union all
select 3,22,9
GO
if not object_id(N'Tempdb..#采购表') is null
drop table #采购表
Go
Create table #采购表([货品ID] int,[采购数] int,[退货数] int)
Insert #采购表
select 1,100,7 union all
select 3,50,null union all
select 5,60,5 union all
select 2,22,null union all
select 4,15,null union all
select 4,8,null union all
select 2,1,null union all
select 3,55,null
Go
--测试数据结束
SELECT ID,
品牌,
货物名称,
SUM(t1.数量 - t2.数量) AS 库存数
FROM #货品表
LEFT JOIN
(
SELECT 货品ID,
SUM(ISNULL(采购数, 0) - ISNULL(退货数, 0)) AS 数量
FROM #采购表
GROUP BY 货品ID
) t1
ON ID = t1.货品ID
LEFT JOIN
(
SELECT 货品ID,
SUM(ISNULL(销售数, 0) - ISNULL(退货数, 0)) AS 数量
FROM #销售表
GROUP BY 货品ID
) t2
ON ID = t2.货品ID
GROUP BY ID,
品牌,
货物名称;


34,588

社区成员

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

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