首页 > 解决方案 > 如何加入两个表的行数不同?

问题描述

我正在尝试为工厂编写有关生产的程序...

最重要的是,我想看看原材料的库存量是多少,但有时如果他们完成了,他们会带回一些原材料。

所以我创建了两个视图,一个用于缺货,它给了我 42 行,第二个用于 14 行的库存,所以在第三个视图中,我可以将第一个视图的值减去第二个,但它不起作用,因为它总是给出我是 14 行而不是 42 行。

这是我第一次看到缺货:

CREATE VIEW V_MOUVEMENT_01(ARTID,plvqe,plvmntht) as
SELECT        P11.ARTID, (SUM(P11.PLDQTE)) AS plvqe, (SUM(P11.PLDMNTNETHT)) AS plvmntht
FROM         dbo.PIECEDIVERSLIGNES AS P11 FULL OUTER JOIN
                         dbo.PIECEDIVERS AS PV ON P11.PCDID = PV.PCDID
WHERE        (PV.PINCODE='STKOUT') AND (PV.DEPID_IN=1) AND (YEAR(PV.PCDDATEEFFET) = YEAR(GETDATE())) AND (MONTH(PV.PCDDATEEFFET) =6)
GROUP BY P11.ARTID

这是考虑的股票:

CREATE VIEW V_MOUVEMENT_02(ARTID,plvqe,plvmntht) as
SELECT        P11.ARTID, (SUM(P11.PLDQTE)) AS plvqe, (SUM(P11.PLDMNTNETHT)) AS plvmntht
  FROM  dbo.PIECEDIVERSLIGNES AS P11 FULL OUTER JOIN
                         dbo.PIECEDIVERS AS PV ON P11.PCDID = PV.PCDID
WHERE        (PV.PINCODE='STKIN') AND (PV.DEPID_IN=1) AND (YEAR(PV.PCDDATEEFFET) = YEAR(GETDATE())) AND (MONTH(PV.PCDDATEEFFET) =6)
GROUP BY P11.ARTID

而这一个是最后一个,它不断给出 14 行:

select V1.ARTID , (V1.plvqe-V2.plvqe)FROM V_MOUVEMENT_01 AS V1 
INNER JOIN V_MOUVEMENT_02 AS V2 ON V1.ARTID=V2.ARTID

标签: sqlsql-serverjoin

解决方案


它的内部连接。改用左外连接。

SELECT V1.ARTID, V1.plvqe-ISNULL(V2.plvqe, 0) AS PLVQE
FROM V_MOUVEMENT_01 AS V1 
LEFT OUTER JOIN V_MOUVEMENT_02 AS V2 ON V1.ARTID = V2.ARTID

推荐阅读