簡體   English   中英

在多行SQL中具有匹配ID的數量求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM