繁体   English   中英

SQl查询:加入4个表:一对多

[英]SQl Query :Joining 4 Tables :One to Many

我的SQL Server数据库中有4个表:

OrderMaster (OrderId [primaryKey], Orderdate, TotalAmount, SupplierName)
OrderDetails (OrderDetailId[primaryKey], OrderId, Item_Id, Quantity, ManufacturerId)
ItemMaster (Item_Id [primaryKey], ITem Name, ITemCost)
ManufacturerMaster (ManuId[primaryKey], ManufacturerName, HandlingFees)

关系是:

  • OrderDetails表Order ID是引用OrderMAster表的主键(一对多)
  • OrderDetails表Item_Id引用ItemMaster的主键
  • ManufacturerIdtable订单ID引用了ManufacturerMaster的主键

Orderdetails表在ORderMaster表中可以有一个记录的许多记录。

现在,我想查询一个列出以下日期为列值的orderdate=05/01/2009所有订单:

  1. 订单号
  2. 每个订单的商品总数(订单明细表中的子记录数量)
  3. 订单中所有项目的总计(总计)ITemcost。

如何下单?

select OD.Id, count(IM.Item_Id), sum(IM.ItemCost * OD.ItemQuantity)
from OrderMaster OM
join OrderDetail OD on OD.OrderId = OD.OrderId
join ItemMaster IM on IM.Item_Id = OD.Item_Id
group by OD.OrderId
where OD.OrderDate >= '2009/05/01' and OD.OrderDate < '2009/05/02'

根据新要求更新

像这样

SELECT 
OrderMaster.OrderId, 
COUNT(OrderDetailId) as TotalUniqeItems,
SUM(Quantity) as TotalItems,
SUM(ItemCost) as CostofUniqueItems,
(
    SELECT ItemCost * Quantity 
    FROM OrderDetail od
    JOIN ItemMaster im ON im.Item_Id = od.Item_Id
    WHERE od.Order_Id = OrderMaster.OrderId
) as TotalCost

FROM OrderMaster 
JOIN OrderDetail ON OrderMaster.OrderId = OrderDetail.OrderId
JOIN ItemMaster ON ItemMaster.Item_Id = OrderDetail.Item_Id
WHERE OrderDate >= '2009/05/01' AND OrderDate <= '2009/05/02'

由于不确定确切的预期结果,因此我提供了两种获取项目总数和成本的不同方法。

注意,我没有检查语法,但是应该关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM