我有2个表。一个是OrderMaster,第二个是OrderDetails.Both通过OrderId连接
订单表字段:OrderId(主键),总计,订单日期
OrderDetail字段:OrderDetailId,ItemId,SupplierId,Amount,OrderId(ForiegnKey)
一个订单可以有多个orderdetail记录,可以来自不同的供应商
现在我想获得仅具有特定供应商ID值(例如:4)和计数(不同供应商ID)= 2的订单。具有此供应商ID的所有订单不应包括在结果集中,因为其中一些订单可能还有其他供应商。预期产量是 OrderId,Sum *属于特定供应商的那些记录的金额(订单中只有该供应商)
编辑:我认为Count(supplierId)= 1应该是查询的一部分。
答案 0 :(得分:1)
尝试这样的事情:
select OrderId, Sum(Amount)
from OrderDetail
where SupplierId = 4
group by OrderId
答案 1 :(得分:1)
这是选择仅有一个特定供应商的订单的一种方法。 where
子句查找该供应商的详细信息,并过滤掉混合供应商的订单。然后计算每个细节行的总计。
select od.OrderId
, sum(od.Sum * od.Amount) as Total
from OrderDetails od
where od.SupplierId = 4
and not exists (
select *
from OrderDetails od2
where od2.OrderId = od.OrderId
and od2.SupplierId <> od.SupplierId
)
group by od.OrderId
我不确定sum
是否正确;这里它将Sum
列与Amount
列相乘。如果你只需要金额,你可以这样写:
, sum(od.Amount) as Total
不需要加入OrderMaster,因为我们可以从详细信息表中获取OrderId。
答案 2 :(得分:0)
你可以尝试这样的事情。
DECLARE @Supl INT
SELECT @Supl = 4
SELECT om.OrderID,
SUM(Amount) TotalForSupplier
FROm OrderMaster om INNER JOIN
OrderDetails od ON om.OrderID = od.OrderID
WHERE od.SupplierId = @Supl
GROUP BY om.OrderID
这将为您提供订单供应商的总数。
这可能包括价格字段,
SUM(金额*价格)
如果您希望只拥有 OrderID 和 Total ,则可以排除内部联接
SELECT od.OrderID,
SUM(od.Amount) TotalForSupplier
FROm OrderDetails od
WHERE od.SupplierId = @Supl
GROUP BY od.OrderID