我正在嘗試為專案可用性檢查構建一個簡單的 SQL 查詢。我的目標是查詢總/總數量超過庫存水平的專案。這是我的表(簡化示例)的樣子:
| 電話號碼 | 物品 | 數量 | 庫存數量 |
|---|---|---|---|
| 1 | 香蕉 | 1 | 1 |
| 2 | 蘋果 | 1 | 1 |
| 3 | 草莓 | 1 | 1 |
| 4 | 香蕉 | 1 | 1 |
我已經嘗試使用以下查詢,但它不起作用:
SELECT
T1.[LineNumber], T1.[Item],
SUM(T1.[Quantity]), T1.[Stockquantity]
FROM
Table T1
WHERE
T1.[Quantity] > T1.[Stockquantity]
GROUP BY
T1.[LineNumber], T1.[Item], T1.[Quantity], T1.[Stockquantity]
是否有人對我應該如何進行此查詢有任何建議或提示,以便將每行的總數量/總數量與庫存數量進行比較,而不僅僅是每行的單個/單個數量與庫存數量進行比較?
非常感謝您提前提供的幫助。
uj5u.com熱心網友回復:
您的示例可能過于簡單,如果StockQuantity是查找庫存的結果,因此在示例中我們可以說以下內容:
香蕉手上的總庫存為 1
然后,如果您期望LineNumber4 被拾取,因為這條線將使BananasSUM的庫存量大于Bananas手頭的總庫存......那么您需要此串列中記錄的運行總計:Item
WITH TotalsLookup as (
SELECT
T1.[LineNumber], T1.[Item],
T1.[Quantity], T1.[Stockquantity],
SUM (T1.[Quantity]) OVER (PARTITION BY Item ORDER BY LineNumber) AS RunningTotal
FROM
[Table] T1
)
SELECT *
FROM TotalsLookup
WHERE RunningTotal > Quantity;
| 電話號碼 | 物品 | 數量 | 庫存數量 | 運行總計 |
|---|---|---|---|---|
| 4 | 香蕉 | 1 | 1 | 2 |
請參閱涵蓋此查詢的一些變體的此 Fiddle,并將為您提供練習的場所:http ://sqlfiddle.com/#!18/12c386/3
can 本身的起源對
StockQuantity性能和其他可能可行的查詢選項有重大影響,我將其稱為這樣,當您將此邏輯應用于應用程式域時,您可以注意這一點,如果StockQuantity不是靜態值,但它本身就是一個聚合,可能會影回應該如何執行比較。
uj5u.com熱心網友回復:
您可以在 having 子句中參考 GROUP BY 的聚合
SELECT
T1.[Item],
SUM(T1.[Quantity]) As TotalQuantity,
MAX(T1.[Stockquantity]) AS StockLevel
FROM
Table T1
GROUP BY
T1.[Item]
HAVING
SUM(T1.[Quantity]) > MAX(T1.[Stockquantity])
這假設Stockquantity產品的所有出現都是相同的。
WHERE 子句在分組前執行,HAVING 子句在分組后執行。
如果您需要行號,則可以使用 STRING_AGG 聚合函式將行號連接到每個組的單個字串中
SELECT STRING_AGG(T1.[LineNumber], ', ') As LineNumbers, ...
uj5u.com熱心網友回復:
您的 SQL 修改代碼(SQL 代碼不起作用)不提供單一輸出
SELECT linenumber,
a.item,
quantity,
SumQuantity,
stockquantity
FROM table A
JOIN(SELECT item,
Sum(quantity) SumQuantity,
max(stockquantity) stockquantity
FROM table C
GROUP BY item) B
ON A.item = B.item
WHERE SumQuantity> stockquantity
輸出
| 電話號碼 | 物品 | 數量 | 數量2 | 庫存數量 |
|---|---|---|---|---|
| 1 | 香蕉 | 1 | 2 | 1 |
| 4 | 香蕉 | 1 | 2 | 1 |
但是我使用以下查詢
SELECT String_agg(linenumber, ',') LineNumbers,
a.item,
quantity,
SumQuantity,
stockquantity
FROM table A
JOIN(SELECT item,
Sum(quantity) SumQuantity
max(stockquantity) stockquantity
FROM table C
GROUP BY item) B
ON A.item = B.item
WHERE SumQuantity> stockquantity
GROUP BY a.item,
quantity,
SumQuantity,
stockquantity
帶來以下結果
| 行號 | 物品 | 數量 | 總數量 | 庫存數量 |
|---|---|---|---|---|
| 1,4 | 香蕉 | 1 | 2 | 1 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441780.html
下一篇:創建存盤程序以顯示姓氏
