簡體   English   中英

具有兩個表的並集的列的SQL SUM不正確

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

這是你想要的??? 創建表loc(位置varchar(10),part varchar(10),qty int)

插入loc值('loca','part a',10),('loca','part b',20),('locb','part c',30),('locc','part d','')

選擇位置,按位置從位置分組中求和(數量) 在此處輸入圖片說明

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM