现在有订单表、入库表和出库表,怎样通过一条SQL语句按照订单号分组查询出每个订单号对应的订单数量、入库数量、出库数量和库存数量?

matitude 2017-04-18 09:28:14
现在有订单表、入库表和出库表,怎样通过一条SQL语句按照订单号分组查询出每个订单号对应的订单数量、入库数量、出库数量和库存数量?
测试用例语句如下:
CREATE TABLE Dingdan(Dingdanhao varchar(12),name varchar(12),guige varchar(10),shuliang int) --订单表
go
insert into Dingdan
select '20170418001','空调','5匹',20 union all
select '20170418002','压缩机','AX',10 union all
select '20170418003','空调','3匹',15 union all
select '20170418004','空调','5匹',30
go
CREATE TABLE Ruku(RukuId int,dingdanhao varchar(12),name varchar(12),guige varchar(10),shuliang int) --入库表
go
insert into Ruku
select 1, '20170418001','空调','5匹',20 union all
select 2, '20170418002','压缩机','AX',5 union all
select 3, '20170418003','空调','3匹',10 union all
select 4, '20170418004','空调','5匹',20 union all
select 5,'20170418002','压缩机','AX',5
go

CREATE TABLE Chuku(ChukuId int,dingdanhao varchar(12),name varchar(12),guige varchar(10),shuliang int ) --出库表
go
insert into Chuku
select 1, '20170418001','空调','5匹',5 union all
select 2, '20170418001','空调','5匹',10 union all
select 3, '20170418002','压缩机','AX',8 union all
select 4, '20170418003','空调','3匹',5 union all
select 5, '20170418003','空调','3匹',5 union all
select 6, '20170418004','空调','5匹',10
go
...全文
1426 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-04-19
  • 打赏
  • 举报
回复
;WITH taba AS (
SELECT dingdanhao ,
SUM(shuliang) AS RukuShuliang
FROM dbo.Ruku
GROUP BY dingdanhao
),tabb AS (
SELECT dingdanhao ,
SUM(shuliang) AS ChukuShuliang
FROM dbo.Chuku
GROUP BY dingdanhao
)
SELECT Dingdan.Dingdanhao ,
Dingdan.name ,
Dingdan.guige ,
SUM(Dingdan.shuliang) AS DingdanShuliang ,
taba.RukuShuliang ,
tabb.ChukuShuliang
FROM dbo.Dingdan
JOIN taba ON taba.dingdanhao = Dingdan.Dingdanhao
JOIN tabb ON tabb.dingdanhao = Dingdan.Dingdanhao
GROUP BY Dingdan.Dingdanhao ,
Dingdan.name ,
Dingdan.guige ,
taba.RukuShuliang ,
tabb.ChukuShuliang



matitude 2017-04-19
  • 打赏
  • 举报
回复
谢谢!用group by 语句能有更简洁的方法吗?
二月十六 2017-04-18
  • 打赏
  • 举报
回复
SELECT  a.Dingdanhao ,
a.name ,
a.guige ,
( SELECT SUM(b.shuliang)
FROM dbo.Dingdan b
WHERE a.Dingdanhao = b.Dingdanhao
) AS DingdanShuliang ,
( SELECT SUM(b.shuliang)
FROM dbo.Ruku b
WHERE a.Dingdanhao = b.dingdanhao
) AS RukuShuliang ,
( SELECT SUM(b.shuliang)
FROM dbo.Chuku b
WHERE a.Dingdanhao = b.dingdanhao
) AS ChukuShuliang
FROM dbo.Dingdan a;


SQL+数据透视+VBA 使数据透视走向更灵活,更智能,更适用。 这个是我和师傅一撇首度合作,他提供了文件并提了要求,我帮他实现其效果 下面从几个方面解释一下: 1、功能 一个源文件和一个通过用SQL查询生成的数据透视 将源文件拖到电脑的任意位置,甚至将文件名也改掉,用VBA配上代码和窗体找到文件,数据透视仍然能够正常工作 2、套用 现在来讲讲怎么使做来的东东适应大家的需要 2、1 用OLE DB窗口引用工作或写SQL语句,因为用这个方法同VBA相通,copy下来代码区的的语句 2、2 打开透视文件,将透视中的字段全部拖来,也就是变成一个空数据透视。 右击下面工作图标 或者 工具》宏》visual basic 编辑器,点击模块看到代码区 2、3 将2、1步骤copy的语句commandtext的数据Array中的引号中 .CommandText = Array(" ") 可能不同版本会有一些差别,同时SQL语句中如果添加了文本生成新字段,双引号要成对翻倍 如:"" AS 单选项 要改成 """" AS 单选项 2、4 语句太长的处理:在代码区如果你想好看一些,你可以插入“ _”来换行,当然不能插在一个单词或自动名等中间。 2、5 将文件存盘,重新打开就会有了数据,你可以将字段拖入数据透视中,创建你自己的数据透视, 2、6 这样文件就可以使用,相信VBA的引导不用教就可以交给别人使用了 下面附上代码,包含3个区: 1、 工作簿去,打开文件时工作 Private Sub Workbook_Open() Dim OP If Dir(Sheets("path").Range("A1")) = "" Then OP = MsgBox("源文件已被移走,请选择下列选项" + Chr(10) + "1、选择是,重新输入文件全名" + Chr(10) + "2、选择否,打开原有的数据透视" + Chr(10) + "3、选择取消,关闭文件", vbYesNoCancel, "Scarlett温馨提示") If OP = vbYes Then UserForm1.Show End If If OP = vbNo Then ActiveWorkbook.Close True End If If OP = vbCancel Then Exit Sub End If Else Call refreshpv End If End Sub 2、窗体区,实现文件的查找 Private Sub CommandButton1_Click() Dim fopen As FileDialog Set fopen = Application.FileDialog(msoFileDialogFilePicker) fopen.Show TextBox1.Value = fopen.SelectedItems(1) Set fopen = Nothing End Sub Private Sub CommandButton2_Click() If InStr(TextBox1.Value, ".") > 0 Then Sheets("path").Range("A1") = TextBox1.Value Call refreshpv unload me Else MsgBox "文件名要带路径含后缀的文件名", "Scarlett_88温馨提示" TextBox1.SetFocus End If End Sub Private Sub CommandButton3_Click() Unload Me End Sub Private Sub TextBox1_Change() End Sub Private Sub UserForm_Activate() End Sub Private Sub UserForm_Click() TextBox1.Value = Sheets("path").Range("A1") End Sub 3、模块区,实现SQL语句的地址更新和刷新数据透视的数据源 Sub refreshpv() With ActiveSheet.PivotTables("数据透视1").PivotCache .Connection = Array( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Sourc

27,579

社区成员

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

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