Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2012 SQL查询优化2012_Sql Server 2012 - Fatal编程技术网

Sql server 2012 SQL查询优化2012

Sql server 2012 SQL查询优化2012,sql-server-2012,Sql Server 2012,我有一个名为SnackMaster的表。其结构如下: SnackID int SnackName varchar(100) SnackAmount decimal(18,2) e、 g: 还有另一个名为SnacksOrderDetais的表,其中包含来自员工的零食订单。其结构如下所示: OrderID int EmployeeID int SnackCount tinyint TotalAmount decimal(18,2

我有一个名为
SnackMaster
的表。其结构如下:

SnackID        int
SnackName      varchar(100)
SnackAmount    decimal(18,2)
e、 g:

还有另一个名为
SnacksOrderDetais
的表,其中包含来自员工的零食订单。其结构如下所示:

OrderID        int
EmployeeID     int  
SnackCount     tinyint
TotalAmount    decimal(18,2)
orderDate      date
e、 g:

我需要一份小吃摘要,如下所示:

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 

使用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

请澄清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

是的,没错。不知何故,他忽略了这一点。现在更正。
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
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