ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 829|回复: 8

[求助] 库存计算SQL语句优化

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-2-17 15:37 | 显示全部楼层 |阅读模式
如何修改附件中的SQL语句,满足以下2个要求:
1. 我希望出库中不需要输入"出库位置",在库存表中还是能得出"位置",因为出库位置是由"名称,型号,注册证,规格,单位,有效日期"确定的,是唯一的.
2.在"库存"表中增加"领用人"列.
  1. SELECT a.名称,a.型号,a.注册证,a.规格,a.单位,a.有效日期,a.入库,b.出库,a.入库-iif(B.出库 is null,0,B.出库) as 库存,a.位置 from
  2. (SELECT 名称,型号,注册证,规格,单位,有效日期,sum(入库数量) AS 入库,入库位置 as 位置 FROM [入库$]  
  3. group by 名称,型号,注册证,规格,单位,有效日期,入库位置) a
  4. left join (SELECT 名称,型号,注册证,规格,单位,有效日期,sum(领用数量) as 出库,出库位置 as 位置 FROM
  5. [出库$] group by 名称,型号,注册证,规格,单位,有效日期,出库位置) b
  6. on  (a.名称=b.名称 or a.名称 is null) and (a.型号=b.型号 or a.型号 is null) and (a.注册证=b.注册证 or a.注册证 is null) and (a.规格=b.规格 or a.规格 is null) and (a.单位=b.单位 or a.单位 is null) and (a.有效日期=b.有效日期 or a.有效日期 is null)
  7. where a.名称<>null
  8. ORDER BY a.名称,a.有效日期
复制代码
出入库登记管理.zip (41.64 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2022-2-18 10:26 | 显示全部楼层
本帖最后由 zhgdy 于 2022-2-18 10:29 编辑

SELECT a.名称,a.型号,a.注册证,a.规格,a.单位,a.有效日期,a.入库,b.出库,a.入库-iif(B.出库 is null,0,B.出库) as 库存,a.位置,b.领用人 from (SELECT 名称,型号,注册证,规格,单位,有效日期,sum(入库数量) AS 入库,入库位置 as 位置 FROM [入库$]   group by 名称,型号,注册证,规格,单位,有效日期,入库位置) a left join (SELECT 名称,型号,注册证,规格,单位,有效日期,sum(领用数量) as 出库,领用人 FROM [出库$] group by 名称,型号,注册证,规格,单位,有效日期,领用人) b on  (a.名称=b.名称 or a.名称 is null) and (a.型号=b.型号 or a.型号 is null) and (a.注册证=b.注册证 or a.注册证 is null) and (a.规格=b.规格 or a.规格 is null) and (a.单位=b.单位 or a.单位 is null) and (a.有效日期=b.有效日期 or a.有效日期 is null) where a.名称<>null ORDER BY a.名称,a.有效日期

个人觉得你库存里有领用人没意义,例如:不是一次性把入库总数量领出,存在多次、不同人领出的情况,查询结果没用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-2-20 23:31 来自手机 | 显示全部楼层
本帖最后由 willin2000 于 2022-2-21 08:37 编辑
zhgdy 发表于 2022-2-18 10:26
SELECT a.名称,a.型号,a.注册证,a.规格,a.单位,a.有效日期,a.入库,b.出库,a.入库-iif(B.出库 is null,0,B. ...

谢谢,语句无法使用,提示缺少参数.
把领用时间和领用人都放进库存中(不同时间不同人分开记录),这样怎么写?
感觉会比较难。

TA的精华主题

TA的得分主题

发表于 2022-3-1 09:01 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
查询代码时没有问题的,有问题的时连接的字符串,原来你用的时绝对地址,附件里我用VBA做了个相对地址的。你看一看 出入库登记管理.rar (78.67 KB, 下载次数: 13)

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-4 11:43 | 显示全部楼层
本帖最后由 willin2000 于 2022-3-4 11:48 编辑
zhgdy 发表于 2022-3-1 09:01
查询代码时没有问题的,有问题的时连接的字符串,原来你用的时绝对地址,附件里我用VBA做了个相对地址的。 ...

非常感谢, 打开时自动更新连接文件的宏非常实用.
我把文件名也改成连接自己了. 以防文件名改了找不到.
  1. Private Sub Workbook_Open()

  2. Sheets("库存").Select
  3. With ActiveWorkbook.Connections(1).ODBCConnection
  4. .Connection = Array(Array("ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.Path & "" & ThisWorkbook.Name & "; DefaultDir=" _
  5. & ThisWorkbook.Path & "\;DriverId=1046;MaxBu"), Array("fferSize=2048;PageTimeout=5;"))
  6. End With
  7. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-4 11:50 | 显示全部楼层
zhgdy 发表于 2022-3-1 09:01
查询代码时没有问题的,有问题的时连接的字符串,原来你用的时绝对地址,附件里我用VBA做了个相对地址的。 ...

谢谢,打开时自动更新文件名录非常实用.

我加入的文件名的更改
  1. Private Sub Workbook_Open()

  2. Sheets("库存").Select
  3. With ActiveWorkbook.Connections(1).ODBCConnection
  4. .Connection = Array(Array("ODBC;DSN=Excel Files;DBQ=" & ThisWorkbook.Path & "" & ThisWorkbook.Name & "; DefaultDir=" _
  5. & ThisWorkbook.Path & "\;DriverId=1046;MaxBu"), Array("fferSize=2048;PageTimeout=5;"))
  6. End With
  7. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-3-4 11:54 | 显示全部楼层
zhgdy 发表于 2022-3-1 09:01
查询代码时没有问题的,有问题的时连接的字符串,原来你用的时绝对地址,附件里我用VBA做了个相对地址的。 ...

非常感谢,打开文件时自动更新目录的宏非常实用

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-8 11:28 | 显示全部楼层
本帖最后由 willin2000 于 2022-7-8 12:02 编辑
zhgdy 发表于 2022-3-1 09:01
查询代码时没有问题的,有问题的时连接的字符串,原来你用的时绝对地址,附件里我用VBA做了个相对地址的。 ...
下面的语句运行错误代码13,提示类型不匹配,应该怎么改?
  1. Private Sub Workbook_Open()
  2. 'With ActiveWorkbook.Connections("出入库登记管理新").OLEDBConnection
  3.     Sheets("库存").Select
  4.     With ActiveWorkbook.Connections(1).ODBCConnection
  5.     .Connection = Array(Array("Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\库存信息统计 工作版.xlsx;Mode=Share Deny Write;Extended Properties=""HDR=YES;IMEX=1"";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False"))
  6. End With
  7. End Sub
复制代码

出入库登记管理新.zip

120.35 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-7-8 12:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
willin2000 发表于 2022-3-4 11:50
谢谢,打开时自动更新文件名录非常实用.

我加入的文件名的更改
  1. Private Sub Workbook_Open()
  2. 'With ActiveWorkbook.Connections("出入库登记管理新").OLEDBConnection
  3.     Sheets("库存").Select
  4.     With ActiveWorkbook.Connections(1).ODBCConnection
  5.     .Connection = Array(Array("Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=D:\库存信息统计 工作版.xlsx;Mode=Share Deny Write;Extended Properties=""HDR=YES;IMEX=1"";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False"))
  6. End With
  7. End Sub
复制代码


这个语句运行显示错误代码13,提示类型匹配错误,应该怎么改.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-11 19:39 , Processed in 0.027484 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表