sql - 如何加入两个表的行数不同?
问题描述
我正在尝试为工厂编写有关生产的程序...
最重要的是,我想看看原材料的库存量是多少,但有时如果他们完成了,他们会带回一些原材料。
所以我创建了两个视图,一个用于缺货,它给了我 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
解决方案
它的内部连接。改用左外连接。
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
推荐阅读
- python - 如何在 python 端的图中获取单击的坐标?
- java - 尝试从小程序切换到 JFrame
- r - 如何按 R 中数据框中每列的每个因子级别查找行数?
- c# - 对“Freezable”类型的引用声称它在“WindowsBase”中定义,但找不到
- python-3.x - 在 Docker Alpine Python 中安装 gevent 时出错
- javascript - 在 PHP 字符串中查找字符
- elixir - 从另一个目录导入模块
- mongodb - 无法读取未定义的属性“总计”
- integer - 朴素贝叶斯和多类分类器返回整数。数据团队说他们应该是概率
- c# - 在不同命名空间中调用相同对象的模式