2017-08-26 61 views
1

下面的查詢獲取某個outlet的總銷售額。SQL Server中的總和案例

輸出:

SourceName  Amount 
------------------------ 
Call Center  2997.00 
Delivero Credit 5879.00 
Eat Easily Cash 57.00 

如果我有網點的名單,出口1和出口2例如,我想這樣度日源總銷量爲每個出口,如果有沒有銷售銷售金額值應爲零將如此。

SourceName  outlet 1 outlet 2 
----------------------------------- 
Call Center  2997.00 500 
Delivero Credit 5879.00  0 
Eat Easily Cash 57.00  66 

在下面查詢的問題,它的雙總和DeliveryCharge 應該是SUM((OrderDetails.Quantity * OrderDetails.UnitPrice)) + Orders.DeliveryCharge - ((SUM((OrderDetails.Quantity * OrderDetails.UnitPrice))) * Orders.Discount/100)

更新查詢:

SELECT 
    s.SourceName, 
    SUM(CASE 
      WHEN o.OutletID ='1' THEN ((ord.Quantity * ord.UnitPrice) + ordd.DeliveryCharge) 
      ELSE 0 
     END) AS [Outlet 1], 
    SUM(CASE 
      WHEN o.OutletID ='1' THEN ((ord.Quantity * ord.UnitPrice) + ordd.DeliveryCharge) 
      ELSE 0 
     END) AS [Outlet 2] 
FROM 
    dbo.Orders ordd 
INNER JOIN 
    dbo.Outlets o ON ordd.OutletID = o.OutletID 
INNER JOIN 
    dbo.OrderDetails ord ON ord.OrderID = ordd.OrderID 
LEFT OUTER JOIN 
    dbo.Sources s ON s.SourceID = ordd.SourceID 
WHERE 
    ordd.OrderID NOT IN (SELECT CanceledOrders.OrderID 
         FROM CanceledOrders) 
    AND ordd.OrderDate BETWEEN '2017-05-1 10:00:00.000' AND '2017-06-1 04:00:00.000' 
GROUP BY 
    s.SourceID, s.SourceName 
ORDER BY 
    s.SourceName 
+1

您需要向我們展示一些數據。通過涉及4個表格和3個連接的查詢,很難猜測您的數據可能是什麼。 –

+0

請參閱更新請求.. – Ayman

回答

1

您目前是以源的名字,這是沒有意義的分組兩次對我來說。除此之外,我認爲你可以通過從GROUP BY中刪除插座名稱並在該列上進行旋轉來獲得所需的輸出。另外,我重構了您的查詢以在每個訂單的子查詢中彙總訂單詳細信息。這應該避免你在交付費用和其他領域看到的重複問題。

WITH MyGroupCte AS (
    SELECT 
     s.SourceName, 
     SUM(CASE WHEN out.OutletName = 'outlet 1' 
       THEN ((1 - (o.Discount/100)) * od.OrderPrice) + o.DeliveryCharge 
       ELSE 0 END) AS [outlet 1], 
     SUM(CASE WHEN out.OutletName = 'outlet 2' 
       THEN ((1 - (o.Discount/100)) * od.OrderPrice) + o.DeliveryCharge 
       ELSE 0 END) AS [outlet 2] 
    FROM dbo.Orders AS o 
    INNER JOIN dbo.Outlets AS out 
     ON o.OutletID = out.OutletID 
    INNER JOIN 
    (
     SELECT 
      OrderID, 
      SUM(od.Quantity * od.UnitPrice) AS orderPrice 
     FROM dbo.OrderDetails 
     GROUP BY OrderId 
    ) od 
     ON od.OrderID = o.OrderID 
    INNER JOIN dbo.Sources AS s 
     ON s.SourceID = o.SourceID 
    WHERE 
     out.OutletID = '6' AND 
     o.OrderID NOT IN (SELECT OrderID FROM CanceledOrders) AND 
     o.OrderDate 
      BETWEEN '2017-05-1 10:00:00.000' AND '2017-06-1 04:00:00.000' 
    GROUP BY 
     o.OrderID, 
     s.SourceName 
) 

SELECT 
    SourceName, 
    [outlet 1], 
    [outlet 2] 
FROM MyGroupCte; 

請考慮使用別名,這使您的查詢更容易閱讀和格式化。

+0

我試過查詢但重複的來源 – Ayman

+0

並且我正在求和SUM((OrderDetails.Quantity * OrderDetails.UnitPrice))傳遞費用將被添加 – Ayman

+0

您沒有給我們任何數據。根據您提供的信息,我的回答是合理的。 –