[英]Summing Qtys with Matching ID in multiple rows SQL
我有一個SQL查詢,返回帶有ID,數量和位置的結果表。 一個項目可以位於多個位置,因此單個項目可以有四行,每行是其自己的位置並具有自己的數量。 例:
SELECT i.ITEM_NO, SUM(w.QTY_ON_HAND - w.QTY_DAMAGED) as QTY, w.LOCATION
FROM Workshop w
LEFT OUTER JOIN ITEM_LIST i
ON i.ITEM_ID = w.ITEM_ID
GROUP BY i.ITEM_NO, w.QTY_ON_HAND, w. QTY_DAMAGED, w.LOACTION
返回:
-----------------------------------
| ITEM_NO | QTY | LOCATION |
-----------------------------------
| SN-15 | 0 | SEA |
-----------------------------------
| SN-15 | 2 | SFO |
-----------------------------------
| TY-14 | 1 | SEA |
-----------------------------------
| TY-14 | 5 | LAX |
-----------------------------------
| TY-14 | 0 | SFO |
-----------------------------------
理想情況下,在同一個查詢中,我想做的是求和每個位置的數量,以找到每個ITEM_NO
的總數量,結果表如下所示:
---------------------------
| ITEM_NO | TOTAL_QTY |
---------------------------
| SN-15 | 2 |
---------------------------
| TY-14 | 6 |
---------------------------
最好的方法是什么,我能否在一個查詢中完成所有操作? 謝謝!
SELECT ITEM_NO, SUM(TOTAL_QTY) AS TOTAL_QTY FROM tablename GROUP BY ITEM_NO
GROUP BY將根據ITEM_NO分隔結果...這聽起來可能有點令人困惑,但確實有意義。
編輯:額外的問題后
SELECT ITEM_NO, SUM(TOTAL_QTY) AS TOTAL_QTY FROM
(
SELECT i.ITEM_NO, SUM(w.QTY_ON_HAND - w.QTY_DAMAGED) as QTY, w.LOCATION
FROM Workshop w
LEFT OUTER JOIN ITEM_LIST i
ON i.ITEM_ID = w.ITEM_ID
GROUP BY i.ITEM_NO, w.QTY_ON_HAND, w. QTY_DAMAGED, w.LOACTION
) AS query1
GROUP BY ITEM_NO
您在這里所做的就是使用查詢結果作為表格來查詢總和。 查詢的每個結果都可以當作數據庫中的表使用。
這是一個基本的聚合查詢。 如果要有效使用SQL,則應學習該語言的基礎知識:
select t.item_no, sum(t.qty) as total_qty
from table t
group by t.item_no;
group by
是語言的基本組成部分。
編輯:
當然。 最簡單的方法是使用with
:
with t as (
SELECT i.ITEM_NO, SUM(w.QTY_ON_HAND - w.QTY_DAMAGED) as QTY, w.LOCATION
FROM Workshop w LEFT OUTER JOIN
ITEM_LIST i
ON i.ITEM_ID = w.ITEM_ID
GROUP BY i.ITEM_NO, w.QTY_ON_HAND, w. QTY_DAMAGED, w.LOCATION
)
select t.item_no, sum(t.qty) as total_qty
from table t
group by t.item_no;
但是,此查詢實際上沒有任何意義。 您不需要按group by
的兩個數量。 因此,請嘗試以下操作:
with t as (
SELECT i.ITEM_NO, SUM(w.QTY_ON_HAND - w.QTY_DAMAGED) as QTY, w.LOCATION
FROM Workshop w LEFT OUTER JOIN
ITEM_LIST i
ON i.ITEM_ID = w.ITEM_ID
GROUP BY i.ITEM_NO, w.LOCATION
)
select t.item_no, sum(t.qty) as total_qty
from table t
group by t.item_no;
進一步的簡化就是:
SELECT i.ITEM_NO, SUM(w.QTY_ON_HAND - w.QTY_DAMAGED) as QTY
FROM Workshop w LEFT OUTER JOIN
ITEM_LIST i
ON i.ITEM_ID = w.ITEM_ID
GROUP BY i.ITEM_NO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.