資料:

我的查詢:
SELECT
itemcode, whsecode, MAX(quantity)
FROM
inventoryTable
GROUP BY
itemcode;
這將回傳此錯誤:
列“inventoryTable.whsecode”在選擇串列中無效,因為它既不包含在聚合函式中也不包含在 GROUP BY 子句中。
當我將 whsecode 放在 GROUP BY 子句中時,它只回傳表中的所有資料。
我想要的輸出是回傳其中專案數量最多的 whsecode。它應該有的輸出是:
whsecode|itemcode|quantity
WHSE2 | SS585 | 50
WHSE2 | SS586 | 50
WHSE1 | SS757 | 30
最終我會將該查詢放在另一個查詢中:
SELECT
A.mrno, A.remarks,
B.itemcode, B.description, B.uom, B.quantity,
C.whsecode, C.whseqty, D.rate
FROM
Mrhdr A
INNER JOIN
Mrdtls B ON A.mrno = B.mrno
INNER JOIN
(
SELECT itemcode, whsecode, MAX(quantity) AS whseqty
FROM inventoryTable
GROUP BY itemcode, whsecode
) C ON B.itemcode = C.itemcode
INNER JOIN
Items D ON B.itemcode = D.itemcode
WHERE
A.mrno = @MRNo AND B.quantity < C.whseqty;
使用 GROUP BY 子句中的 whsecode,輸出為:

但正如我之前所說的,問題在于它回傳相同 itemcode 的多行。它應該有的輸出是:
mrno | remarks| itemcode| description | uom |quantity|whsecode|whseqty| rate
MR211100003008 | SAMPLE | FG 4751 | LONG DRILL 3.4 X 200 L550 | PCS. | 50.00 | WHSE3 | 100 | 0.0000
MR211100003008 | SAMPLE | FG 5092 | T-SPIRAL TAP M3.0 X 0.5 L6904 | PCS | 20.00 | WHSE1 | 80 | 0.0000
我不確定是否B.quantity < C.whseqty應該在那里,但它消除了不是最大值的其他值。
uj5u.com熱心網友回復:
有很多方法可以解決這個問題。例如,通過使用該ROW_NUMBER功能:
SELECT
itemcode,
whsecode,
quantity As whseqty
FROM
(
SELECT
itemcode,
whsecode,
quantity,
ROW_NUMBER() OVER (PARTITION BY itemcode ORDER BY quantity DESC) As RN
FROM
inventoryTable
)
WHERE
RN = 1
;
uj5u.com熱心網友回復:
編輯:
select whsecode,A.itemcode,qty from inventoryTable
join (SELECT itemcode, MAX(quantity) as qty FROM inventoryTable GROUP BY itemcode) as A on A.itemcode = inventoryTable.itemcode and A.qty = inventoryTable.quantity
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/383811.html
上一篇:使用Case陳述句分組不計零
