[英]SQL SUM of a column with the union of two tables is incorrect
我有两个位置表:
1)一张表将列出其中包含零件的所有位置。 因此,一行将具有LOCA PARTB QTY 5,另一行将具有LOCA PARTC QTY2,另一行将具有LOCB PARTX QTY3。因此,当一行的QTY = 0时,它将被删除。 因此,在某些情况下,此表中将不再列出位置
LOCQTYS表:
Location | Part |QTY
LOCA | PARTB | QTY 5
LOCA | PARTC | QTY2
LOCB | PARTX | QTY3
2)我有另一个表,列出存在的所有位置的所有名称,无论是否分配了零件或没有分配零件。
该表仅列出名称和描述。
LOCNames表:
LocName | Description
LOCA | Storage
LOCA | Storage
LOCB | Base
因此,我尝试列出所有用户位置,如果未分配任何零件,则显示0或显示所有分配零件的总和。
example:
Loc1 30
Loc2 12
Loc3 0
Loc4 6
我的sql语句如下:
sql = @"SELECT locnam,
Sum(locqty)
FROM (SELECT locnam,
locqty
FROM " + DatabaseUtility.LibraryList.I + @".locqtys
UNION
SELECT locdnam AS LOCNAM,
'0' AS LOCQTY
FROM " + DatabaseUtility.LibraryList.I + @".locnames) R
GROUP BY locnam
ORDER BY locnam ASC";
问题是计数关闭了...
So what should be,
example:
Loc1 30
Loc2 12
Loc3 0
Loc4 6
最终是:
example:
Loc1 25
Loc2 8
Loc3 0
Loc4 3
该金额低于实际金额...我在做什么错呢?
使用“ UNION ALL”代替“ UNION” ... Union消除重复项。
您正在寻找left join
:
select l.locnam, coalesce(sum(lp.locqty), 0) as locqty
from locations l left join
locationparts lp
on lp.locnam = l.locnam
group by l.locnam;
在Sql Sums中始终使用“ Isnull(column_name,0.00)”和“ union all”
/ ------------------------ /
SELECT isnull(locnam) as locnam,
Sum(isnull(locqty,0.00) as locqty
FROM (SELECT isnull(locnam,0.00) as locnam
isnull(locqty,0.00) as locqty)
FROM " + DatabaseUtility.LibraryList.I + @".locqtys
UNION all
SELECT isnull(locdnam,0.00) AS LOCNAM,
'0.00' AS LOCQTY
FROM " + DatabaseUtility.LibraryList.I + @".locnames) R
GROUP BY locnam
ORDER BY locnam ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.