繁体   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