2014-02-14 2 views
1

SnackMaster이라는 테이블이 있습니다.SQL 쿼리 최적화 2012

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

예 : : : 그것의 구조는 아래와 같습니다

SnacksID  : 1 
SnacksName : Tea 
SnacksAmount : 10.00 

그리고 직원들의 식사 주문을 포함 SnacksOrderDetais라는 이름의 다른 테이블이 있습니다.

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

나는 결과를 얻기 위해 다음 쿼리를 사용 : 나는 다음과 같은 스낵 요약이 필요

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 

:

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

예컨대 : 그것은 아래 구조 주어진다입니다. 결과는 괜찮지 만 다른 최적화 된 쿼리를 사용할 수 있는지 알고 싶습니다.

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

, 시작을 위해 TotalAmount 및 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