以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]表join时on里边字段部份为null的情况 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=179511) |
||||
-- 作者:hzcaqjf -- 发布时间:2022/8/27 11:43:00 -- [求助]表join时on里边字段部份为null的情况 现有入库表 出库表, 想根据两表用SQL语句生成盘存表(仓库 名称 品牌 型号 上月结存 本月收进 本月发出 本月结存) s elect c.仓库,c.名称,c.品牌,c.型号,c.上月结存,d.本月收进 from (s elect a.仓库,a.名称,a.品牌,a.型号,iif(b.月前出库 is null,a.月前入库,(a.月前入库 - b.月前出库)) as 上月结存 from (s elect 仓库,名称,品牌,型号,sum(金额) as 月前入库 from {入库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) a left join (s elect 仓库,名称,品牌,型号,sum(金额) as 月前出库 from {出库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) b on a.仓库 = b.仓库 And a.名称 = b.名称 And a.品牌 = b.品牌 And a.型号 = b.型号) c left join (s elect 仓库,名称,品牌,型号,sum(金额) As 本月收进 from {入库表} where 日期 >= #8/1/2022# and 日期 <= #8/31/2022# group by 仓库,名称,品牌,型号) d on c.仓库 = d.仓库 And c.名称 = d.名称 And c.品牌 = d.品牌 And c.型号 = d.型号
这里无论入库表和出库表,仓库和名称两字段都不为空. 当字段"品牌"或 "型号"中部分为空时,"上月结存"能得到正确结果,"本月收进"则无结果. 当字段"品牌"或 "型号"都不为空时,"上月结存"和"本月收进"都能得到正确结果. 请问某名称商品的品牌或型号允许为空时,如何用SQL语句正确生成盘存表? |
||||
-- 作者:有点蓝 -- 发布时间:2022/8/27 11:56:00 -- 请举例具体表格数据说明。入库表和出库表,"品牌"或 "型号"中部分为空时正确结果应该是怎么样的? 几种情况 1、入库表"品牌"空,"型号"空;出库表"品牌"空,"型号"空; 2、入库表"品牌"不为空,"型号"空;出库表"品牌"空,"型号"空; 3、入库表"品牌"空,"型号"不为空;出库表"品牌"空,"型号"空; 4、入库表"品牌"空,"型号"空;出库表"品牌"不为空,"型号"空; 5、入库表"品牌"空,"型号"空;出库表"品牌"空,"型号"不为空; ……
|
||||
-- 作者:hzcaqjf -- 发布时间:2022/8/27 16:24:00 -- 文字讲不清楚,现上传实例:
名称pd04 本月收进应为100,但这里为空. 如果pd04的品牌 型号不为空,本月收进能显示正确结果(100).
[此贴子已经被作者于2022/8/27 16:30:51编辑过]
|
||||
-- 作者:有点蓝 -- 发布时间:2022/8/27 16:37:00 -- 如果都是品牌型号同时为空的情况,则为空的数据单独计算 s elect c.仓库,c.名称,c.品牌,c.型号,c.上月结存,d.本月收进 from (s elect a.仓库,a.名称,a.品牌,a.型号,iif(b.月前出库 is null,a.月前入库,(a.月前入库 - b.月前出库)) as 上月结存 from (s elect 仓库,名称,品牌,型号,sum(金额) as 月前入库 from {入库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) a left join (s elect 仓库,名称,品牌,型号,sum(金额) as 月前出库 from {出库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) b on a.仓库 = b.仓库 And a.名称 = b.名称 And a.品牌 = b.品牌 And a.型号 = b.型号) c left join (s elect 仓库,名称,品牌,型号,sum(金额) As 本月收进 from {入库表} where 日期 >= #8/1/2022# and 日期 <= #8/31/2022# group by 仓库,名称,品牌,型号) d on c.仓库 = d.仓库 And c.名称 = d.名称 And c.品牌 = d.品牌 And c.型号 = d.型号 union s elect c.仓库,c.名称,c.品牌,c.型号,c.上月结存,d.本月收进 from (s elect a.仓库,a.名称,a.品牌,a.型号,iif(b.月前出库 is null,a.月前入库,(a.月前入库 - b.月前出库)) as 上月结存 from (s elect 仓库,名称,品牌,型号,sum(金额) as 月前入库 from {入库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) a left join (s elect 仓库,名称,品牌,型号,sum(金额) as 月前出库 from {出库表} where 日期 < #8/1/2022# group by 仓库,名称,品牌,型号) b on a.仓库 = b.仓库 And a.名称 = b.名称 And a.品牌 is null And a.型号 is null) c left join (s elect 仓库,名称,品牌,型号,sum(金额) As 本月收进 from {入库表} where 日期 >= #8/1/2022# and 日期 <= #8/31/2022# group by 仓库,名称,品牌,型号) d on c.仓库 = d.仓库 And c.名称 = d.名称
|