C# 具有两个表并集的列的SQL和不正确

C# 具有两个表并集的列的SQL和不正确,c#,sql,sum,db2,union,C#,Sql,Sum,Db2,Union,我有两个位置表: 1) 一个表将列出其中包含零件的所有位置。因此,一行将有LOCA PARTB数量5,另一行将有LOCA PARTC数量2,另一行可能有LOCB PARTX数量3。。因此,当一行的数量=0时,它将被删除。因此,在某些情况下,某个位置将不再列在此表中 LOCQTYS表格: Location | Part |QTY LOCA | PARTB | QTY 5 LOCA | PARTC | QTY2 LOCB | PARTX | QTY3 2) 我还有一个表

我有两个位置表:

1) 一个表将列出其中包含零件的所有位置。因此,一行将有LOCA PARTB数量5,另一行将有LOCA PARTC数量2,另一行可能有LOCB PARTX数量3。。因此,当一行的数量=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

总数低于实际。。。我做错了什么?

您正在寻找一个
左连接:

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;

您正在寻找一个
左连接

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;

使用“联合所有”而不是“联合”。。。Union消除重复项。

使用“Union ALL”而不是“Union”。。。联合消除重复项。

这就是您要找的吗??? 创建表loc (位置varchar(10), 第10部分, 数量(整数)

插入loc值 (‘失水事故’、‘a部分’、10), (“失水事故”,“b部分”,20), (‘locb’,‘c部分’,30), (‘locc’、‘d部分’、“”)


按位置从loc组中选择位置、总和(数量)

这就是您要找的吗??? 创建表loc (位置varchar(10), 第10部分, 数量(整数)

插入loc值 (‘失水事故’、‘a部分’、10), (“失水事故”,“b部分”,20), (‘locb’,‘c部分’,30), (‘locc’、‘d部分’、“”)

按位置从loc组中选择位置、总和(数量)

在Sql总和中始终使用“Isnull(列名称,0.00)”和“union all”

/------------------------/

在Sql求和中,始终使用“Isnull(列名称,0.00)”和“union all”

/------------------------/


是的,就是这样!没有考虑到可能存在具有相同位置和数量的不同行。。。谢谢是的,就是这样!没有考虑到可能存在具有相同位置和数量的不同行。。。谢谢非常感谢。我不熟悉合并函数。在这种情况下,您可以使用coalesce函数、ifnull函数或case指令。我不熟悉合并函数。在这种情况下,您可以使用coalesce函数、ifnull函数或case指令