2009-07-24 71 views
1

我有4代表在我的SQL Server DB:SQL查詢:加入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表單ID闖民宅的主鍵OrderMaster表(一對多)
  • OrderDetails表Item_Id引用ItemMaster的主鍵
  • ManufacturerIdtable訂單ID引用ManufacturerMaster的主鍵

Orderdetails表可以在ORderMaster表中有一條記錄的許多記錄。

現在我想有一個查詢,列出所有的命令,這些命令orderdate=05/01/2009與下面的項目爲列中的值:

  1. 訂單號
  2. 項目總數(兒童記錄的OrderDetail表號)每個訂單
  3. 訂單中所有項目的總成本(總和)ITemcost。

如何通過?

+0

「露我的家庭作業...」 – 2009-07-24 17:59:43

+0

然後標記爲家庭作業。 – cfeduke 2009-07-24 18:04:50

回答

1
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' 

每個新的要求更新

0

像這樣的事情

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' 

我包括2種不同的方式來獲得項目總Numnber和成本,因爲我不確定確切想要的結果的。

請注意,我沒有檢查我的語法,但這應該是接近的。