2014-02-14 37 views
1

我有一個名爲SnackMaster的表。SQL查詢優化2012

SnackID  int 
SnackName  varchar(100) 
SnackAmount decimal(18,2) 

e.g:低於其結構給出

SnacksID  : 1 
SnacksName : Tea 
SnacksAmount : 10.00 

而且有一個名爲SnacksOrderDetais其中包含員工小吃訂單另一個表。

OrderID  int 
EmployeeID  int 
SnackCount  tinyint 
TotalAmount decimal(18,2) 
orderDate  date 

e.g:它的結構如下

OrderID  : 1, 
EmployeeID : 1, 
SnackCount : 2 (two cup tea), 
TotalAMount : 20 (2*10), 
OrderDate : 2014-02-14 

OrderID  : 2, 
EmployeeID : 2, 
SnackCount : 2 (two cup tea), 
TotalAMount : 20 (2*10), 
OrderDate : 2014-02-14 

我需要一個小吃彙總如下所示:

SnacksName : Tea, 
SnackCount : 4 (that is 2 each from the above two orders), 
TotalAmount : 40 (twenty from each orders) 

我用下面的查詢來獲取結果。結果是好的,但我想知道是否有任何其他優化查詢可用?

SELECT DISTINCT SOD.SnacksID 
    ,SnacksName 
    ,(SELECT SUM(SnacksCount) 
     FROM SnacksOrderDetails 
     WHERE SnacksID = SOD.SnacksID) AS SnacksCount 
FROM SnacksOrderDetails SOD 
INNER JOIN SnacksMaster SM ON SOD.SnacksID = SM.SnacksID 
WHERE SOD.OrderedOn = @OrderDate 

回答

1

請,澄清總金額和SnackCount

這裏的區別的一個開始:

SELECT SM.SnacksName, 
     SUM(SOD.SnacksCount) AS SnacksCount 
FROM SnacksMaster SM 
INNER JOIN SnacksOrderDetails SOD ON SOD.SnacksID = SM.SnacksID AND SOD.OrderedOn = @OrderDate 
GROUP BY SM.SnacksName 
1

使用GROUP BY來獲得相同的。事情是這樣的:

SELECT SOD.SnacksID, SnacksName, SUM(SnacksCount) AS SnacksCount 
FROM SnacksOrderDetails SOD 
INNER JOIN SnacksMaster SM ON SOD.SnacksID = SM.SnacksID 
WHERE SOD.OrderedOn = @OrderDate 
GROUP BY SOD.SnacksID 
+0

Yes..Correct。不知何故忽略了它。現在糾正。 – Neels