我已經編寫了一個SQL查詢來計算我們每個倉庫中的庫存總量,如下所示。如何彙總說明欄?
SELECT
InventoryItem.ItemName as 'Part Number',
InventoryItemDescription.ItemDescription as 'Description',
InventoryStockTotal.UnitsInStock as 'In Stock',
InventoryStockTotal.WarehouseCode AS 'Warehouse',
InventoryItem.Status,
InventoryItem.AverageCost AS 'Average Cost',
(InventoryItem.AverageCost * UnitsInStock) AS 'Stock Value'
FROM dbo.InventoryItemDescription
INNER JOIN dbo.InventoryItem
ON InventoryItemDescription.ItemCode = InventoryItem.ItemCode
INNER JOIN dbo.InventoryStockTotal
ON InventoryStockTotal.ItemCode = InventoryItem.ItemCode
這給了我這樣的
╔═════════════╦═════════════╦══════════╦═══════════════════╦════════╦══════════════╦═════════════╗
║ Part Number ║ Description ║ In Stock ║ Warehouse ║ Status ║ Average Cost ║ Stock Value ║
╠═════════════╬═════════════╬══════════╬═══════════════════╬════════╬══════════════╬═════════════╣
║ 555 ║ FILTER ║ 0 ║ BRISBANE ║ A ║ 8.761043 ║ 0 ║
║ 555 ║ FILTER ║ 187 ║ MAIN ║ A ║ 8.761043 ║ 1638.315041 ║
║ 555 ║ FILTER ║ 0 ║ MELBOURNE ║ A ║ 8.761043 ║ 0 ║
║ 555 ║ FILTER ║ 21 ║ PERTH ║ A ║ 8.761043 ║ 183.981903 ║
║ 555 ║ FILTER ║ 0 ║ PATTISONS ║ A ║ 8.761043 ║ 0 ║
║ 555 ║ FILTER ║ 12 ║ QLD Warehouse (1) ║ A ║ 8.761043 ║ 105.132516 ║
║ 555 ║ FILTER ║ 22 ║ SYDNEY ║ A ║ 8.761043 ║ 192.742946 ║
╚═════════════╩═════════════╩══════════╩═══════════════════╩════════╩══════════════╩═════════════╝
但是結果,我想編寫一個查詢,這將使我每個零件號的總數,如下所示(顯然,如果我爲所有倉庫顯示倉庫總量,則倉庫代碼變得多餘)
此查詢按零件號分組。
╔═════════════╦════════════════╦══════════╦════════╦══════════════╦═════════════╗
║ Part Number ║ Description ║ In Stock ║ Status ║ Average Cost ║ Stock Value ║
╠═════════════╬════════════════╬══════════╬════════╬══════════════╬═════════════╣
║ 555 ║ WIX AIR FILTER ║ 242 ║ A ║ 8.761043 ║ 2120.172406 ║
╚═════════════╩════════════════╩══════════╩════════╩══════════════╩═════════════╝
我已經能夠得到工作的唯一查詢此
SELECT
InventoryItem.ItemName as 'Part Number',
InventoryItem
SUM(InventoryStockTotal.UnitsInStock) as 'In Stock',
AVG(InventoryItem.AverageCost) AS 'Average Cost',
(AVG(InventoryItem.AverageCost) * SUM(InventoryStockTotal.UnitsInStock)) AS 'Stock Value'
FROM dbo.InventoryItemDescription
INNER JOIN dbo.InventoryItem
ON InventoryItemDescription.ItemCode = InventoryItem.ItemCode
INNER JOIN dbo.InventoryStockTotal
ON InventoryStockTotal.ItemCode = InventoryItem.ItemCode
GROUP BY InventoryItem.ItemName
這給了我這個
╔═════════════╦════════════╦══════════════╦═════════════╗
║ Part Number ║ In Stock ║ Average Cost ║ Stock Value ║
╠═════════════╬════════════╬══════════════╬═════════════╣
║ 555 ║ 242.000000 ║ 8.761043 ║ 2120.172406 ║
╚═════════════╩════════════╩══════════════╩═════════════╝
的問題
我需要在結果表中也包括項目描述和狀態代碼等,除了whe n個I嘗試將它們添加到它返回一個錯誤
Column 'dbo.InventoryItemDescription.ItemDescription' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. I understand the cause of this error because its trying to group a column that doesn't have an aggregate, but how can I get around this?
的理想解決方案
的部分的數字說明將是每一個實例相同的select語句,是有一些方法可以讓我指示SQL僅選擇說明的第一個實例?
** EDIT 2 **
我可不可以利用SELECT DISTINCT
功能?
如果每個零件號的描述總是相同的,不要費心將其添加到group by子句中。您還可以利用'窗口'函數計算平均值/總額,同時保留每個描述或倉庫價值。 – qxg
嗨,我沒有將它添加到組按條款....除非我沒有!我怎麼不把這個包含在group by子句中? –