复杂的SQL Server CE 4.0 SELECT查询

米加洛兹

更新:重写了问题,使其更加清晰(希望如此)

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

我有3个表用于此查询:

  • Artikels:保存有关某个Artikel(产品)的数据。
  • Bestellingen:保存订单的一般信息。
  • BestelDetails:保存订单行。

以下查询为我提供了所有与该报告相关的数据以及相关数据的列表

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

该查询为我提供了一个较小的Artikels列表,并且仍需要多少个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

我从第一个列表中获得了包含该artikel的额外信息的较小列表。如果删除WHERE子句并进行LEFT JOINS,则可以获取所需的数据,但是OPEN列中的计算是错误的。

穆勒(GullitsMullet)

是否要显示所有产品,但只对状态为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章