ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

join语句的问题求教

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-3 14:07 | 显示全部楼层 |阅读模式
    sql = "select 库存数量,数量2,数量3 as 数量 from (" & _
    "(select 编码 from [库存日报表$]) AS A" & _
    " left join" & _
    " (select 油品编码,库存数量 from [库存表$] where 加油站 like '" & Range("日报表加油站").Value & "') AS B" & _
    " ON A.编码=B.油品编码)" & _
    " left join" & _
    " (select 油品编码,sum(入库数量) as 数量2,sum(销售数量) as 数量3 from [变动表$] where 加油站 like '" & Range("日报表加油站").Value & "' and 日期 > #" & Date1 & "#" & _
    " group by 油品编码) AS C" & _
    " ON A.编码=C.油品编码"
'以上代码的作用是取出按"库存日报表"中编码的排列顺序排列的"库存表"的库存数量及"变动表"中指定日期以后按编码汇总的入库数量及销售数量
'我最终的要求是求出"库存数量-数量2+数量3"即指定日期的库存数量,但是如果将第一句改成:"select (库存数量,数量2,数量3) as 数量 from ("
'那么得到的结果是只有在[变动表]出现过的编码才会有数据,否则就为空(把结果拷贝到工作表可以看出),不知何原因?或者是不是我的方法不对?

TA的精华主题

TA的得分主题

发表于 2007-1-3 14:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

建议上传附件说明.

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-3 14:47 | 显示全部楼层
怎么上传不了? slYvXBdY.zip (82.57 KB, 下载次数: 15)
[此贴子已经被作者于2007-1-3 15:16:47编辑过]

TA的精华主题

TA的得分主题

发表于 2007-1-3 21:14 | 显示全部楼层
QUOTE:
以下是引用ayang在2007-1-3 14:07:36的发言:

'我最终的要求是求出"库存数量-数量2+数量3"即指定日期的库存数量

那就:

    sql = "select 库存数量-数量2+数量3 as 数量 from (" & _
    "(select 编码 from [库存日报表$]) AS A" & _
    " left join" & _
    " (select 油品编码,库存数量 from [库存表$] where 加油站 like '" & Range("日报表加油站").Value & "') AS B" & _
    " ON A.编码=B.油品编码)" & _
    " left join" & _
    " (select 油品编码,sum(入库数量) as 数量2,sum(销售数量) as 数量3 from [变动表$] where 加油站 like '" & Range("日报表加油站").Value & "' and 日期 > #" & Date1 & "#" & _
    " group by 油品编码) AS C" & _
    " ON A.编码=C.油品编码"

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-3 21:24 | 显示全部楼层
我试过的,不行啊大姐
如果这样,把结果拷贝到工作表,那么只有在[变动表]出现过的编码才会有数据,没有出现过的就为空 JIhaXiF6.rar (59.78 KB, 下载次数: 14)
[此贴子已经被作者于2007-1-3 21:31:30编辑过]

TA的精华主题

TA的得分主题

发表于 2007-1-3 21:46 | 显示全部楼层

不是很明白,只看出原来的两段查询:

    sql = "select 加油站,油品编码,油品名称,计量单位 from [库存表$] where 加油站 like '" & JYZName & "'"
    Sheets("库存日报表").Select
    [A2].CopyFromRecordset cn.Execute(sql)
   
    sql = "select 库存数量,数量2,数量3 as 数量 from (" & _
    "(select 编码 from [库存日报表$]) AS A" & _
    " left join" & _
    " (select 油品编码,库存数量 from [库存表$] where 加油站 like '" & Range("日报表加油站").Value & "') AS B" & _
    " ON A.编码=B.油品编码)" & _
    " left join" & _
    " (select 油品编码,sum(入库数量) as 数量2,sum(销售数量) as 数量3 from [变动表$] where 加油站 like '" & Range("日报表加油站").Value & "' and 日期 > #" & Date1 & "#" & _
    " group by 油品编码) AS C" & _
    " ON A.编码=C.油品编码"
   
    Set temp = cn.Execute(sql)
    [F2].CopyFromRecordset temp

可以合成一段查询:

    sql = "select 加油站,A.油品编码,油品名称,计量单位,库存数量-数量2+数量3 as 数量 from " & _
    "(select 加油站,油品编码,油品名称,计量单位,库存数量 from [库存表$] where 加油站 like '" & JYZName & "') AS A" & _
    " left join" & _
    " (select 油品编码,sum(入库数量) as 数量2,sum(销售数量) as 数量3 from [变动表$] where 加油站 like '" & JYZName & "' and 日期 > #" & Date1 & "#" & " group by 油品编码) AS B" & _
    " ON A.油品编码=B.油品编码"
   
    Sheets("库存日报表").Select
    [A2].CopyFromRecordset cn.Execute(sql)

TA的精华主题

TA的得分主题

发表于 2007-1-3 22:08 | 显示全部楼层

明白了,这样:

    sql = "select 加油站,A.油品编码,油品名称,计量单位,库存数量-IIF(B.油品编码 IS NULL,0,数量2)+IIF(B.油品编码 IS NULL,0,数量3) as 数量 from " & _
    "(select 加油站,油品编码,油品名称,计量单位,库存数量 from [库存表$] where 加油站 like '" & JYZName & "') AS A" & _
    " left join" & _
    " (select 油品编码,sum(入库数量) as 数量2,sum(销售数量) as 数量3 from [变动表$] where 加油站 like '" & JYZName & "' and 日期 > #" & Date1 & "#" & " group by 油品编码) AS B" & _
    " ON A.油品编码=B.油品编码"
   
    Sheets("库存日报表").Select
    [A2].CopyFromRecordset cn.Execute(sql)

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-3 22:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

3KS

高手就是高手啊

另外能不能问问,你这些方法是从哪儿看来的啊?

TA的精华主题

TA的得分主题

发表于 2007-1-3 22:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-3 22:41 | 显示全部楼层

谢谢了,有空好好学学

left join 的ON部分,可能有两个条件吗?

[此贴子已经被作者于2007-1-3 23:02:04编辑过]
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 07:09 , Processed in 0.049806 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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