C# 具有两个表并集的列的SQL和不正确
我有两个位置表: 1) 一个表将列出其中包含零件的所有位置。因此,一行将有LOCA PARTB数量5,另一行将有LOCA PARTC数量2,另一行可能有LOCB PARTX数量3。。因此,当一行的数量=0时,它将被删除。因此,在某些情况下,某个位置将不再列在此表中 LOCQTYS表格: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) 我还有一个表
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指令