复杂 SQL 服务器 CE 4.0 SELECT 查询

Complex SQL Server CE 4.0 SELECT query

更新:重写问题以更清楚(希望)

我正在使用 SQL Server CE 4.0 作为数据库。

我有 3 个表用于此查询:

以下查询为我提供了与此报告相关的所有文章的列表

Select a.id, a.code, a.naam, a.Voorraad
From Artikels a

这个查询给了我一个更小的 artikels 列表,以及仍然需要多少它们来完成剩余的(部分)订单。

Select a.id, sum (bd.Hoeveelheid)-sum(bd.Voldaan)-sum (bd.Geannuleerd)-sum(bd.BackOrder) as [Open]
From Artikels a
LEFT JOIN BestelDetails bd ON a.ID = bd.ArtikelID
LEFT JOIN Bestellingen b ON bd.BestelID = b.ID
WHERE b.Status = 2
GROUP BY a.id

现在我想在第一个列表中添加一个列,结果为 [OPEN],其中 ID 相同,如果不相同,则添加一个 0。

如果我运行

Select a.Code, a.Naam, a.Voorraad, sum(bd.Hoeveelheid)-sum(bd.Voldaan)-sum(bd.Geannuleerd) as [Open]
From Artikels a
INNER JOIN BestelDetails bd ON a.ID = bd.ArtikelID
INNER JOIN Bestellingen b ON bd.BestelID = b.ID
WHERE b.Status = 2
GROUP BY a.Code, a.Naam, a.Voorraad

我得到了较小的列表,其中包含第一个列表中该文章的额外信息。如果我删除 WHERE 子句并进行 LEFT JOINS,我得到了我需要的数据,但是 OPEN 列中的计算是错误的。

是否要显示所有产品,但只对状态为 1 的产品求和?如果是这样,我认为您需要在连接中使用子查询。试试这个:

Select a.code, a.Naam, a.Voorraad, isnull(sum(orders.Hoeveelheid)-sum(orders.Voldaan)-sum(orders.Geannuleerd),0) as Besteld

from Artikels a

left join 
    (   select bd.ArtikelID, bd.BestelID, bd.Hoeveelheid, bd.Voldaan, bd.Geannuleerd
        from BestelDetails bd
            join Bestellingen b on bd.BestelID = b.ID and b.status=1    ) orders on a.ID = orders.ArtikelID 

group by a.Code, a.Naam, a.Voorraad