[英]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.