以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  两个表union后再与第三表left join要怎么写  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92464)

--  作者:happyft
--  发布时间:2016/11/4 0:09:00
--  两个表union后再与第三表left join要怎么写
下面的语句是先将两个表union后再left join第三个表:
s elect b.产品编码,b.工序号,a.仓库,盘点日期,(实盘数量+实盘不良数量+实盘报废数量) As 实盘数量,本期入库,本期出库,本期变动 from 

(S ELECT b.产品编码,b.工序号,a.仓库,盘点日期 FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号 \'
Union 
S ELECT 产品编码,工序号,仓库,\'\' AS 盘点日期 FROM 库存表 
WHERE NOT exists (S ELECT DISTINCT 产品编码 FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号))

LEFT JOIN
 (s elect 产品编码,工序号,仓库,isnull(sum(入库数量),0) as 本期入库,isnull(sum(出库数量),0) as 本期出库,isnull(sum(进出数量),0) as 本期变动 from Stockinout 
 where 进出类别 <> \'盘点\' and 品质状态 <> \'未判定\' And 仓库 = \'电子成品仓\' and 进出日期 > \'2016-09-30\' group by 产品编码,工序号,仓库) d

on b.产品编码 = d.产品编码 and b.工序号 = d.工序号 and a.仓库 = d.仓库

执行时总提示 “d处有语法错误”,为什么?正确的要怎么写,前面红色部份单独运行都是正确的
谢谢!


--  作者:有点蓝
--  发布时间:2016/11/4 8:44:00
--  
select c.产品编码,c.工序号,c.仓库,c.盘点日期,c.实盘数量,d.本期入库,d.本期出库,d.本期变动 from 
(SeLECT b.产品编码,b.工序号,a.仓库,盘点日期,(实盘数量+实盘不良数量+实盘报废数量) As 实盘数量 FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号 
Union 
SeLECT 产品编码,工序号,仓库,\'\' AS 盘点日期,\'\' as 实盘数量 FROM 库存表 
WHERE NOT exists (SeLECT DISTINCT 产品编码 FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号)) as c

LEFT JOIN
 (select 产品编码,工序号,仓库,isnull(sum(入库数量),0) as 本期入库,isnull(sum(出库数量),0) as 本期出库,isnull(sum(进出数量),0) as 本期变动 from Stockinout 
 where 进出类别 <> \'盘点\' and 品质状态 <> \'未判定\' And 仓库 = \'电子成品仓\' and 进出日期 > \'2016-09-30\' group by 产品编码,工序号,仓库) d

on c.产品编码 = d.产品编码 and c.工序号 = d.工序号 and c.仓库 = d.仓库

--  作者:HappyFt
--  发布时间:2016/11/4 13:05:00
--  
谢谢,可以了,再问过问题如下:
S eLECT 产品编码,工序号,仓库,\'\' AS 盘点日期,0 as 实盘数量 FROM 库存表 
WHERE (产品编码+工序号+仓库) NOT in (S eLECT DISTINCT 产品编码,工序号,仓库 FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号)

想实现用三个字段的组合值不在某个表中作为条件来筛选,上面的代码运行提示
消息 116,级别 16,状态 1,第 2 行
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

这种方式要怎么写才正确?




--  作者:有点蓝
--  发布时间:2016/11/4 13:51:00
--  
S eLECT 产品编码,工序号,仓库,\'\' AS 盘点日期,0 as 实盘数量 FROM 库存表 
WHERE (isnull(产品编码,\'\')+isnull(工序号,\'\')+isnull(仓库,\'\')) NOT in (S eLECT DISTINCT isnull(产品编码,\'\')+isnull(工序号,\'\')+isnull(仓库,\'\') FROM 盘点表 a inner join 盘点明细 b on a.盘点编号 = b.盘点编号)