我有一个sql查询,它返回一个包含ID,Qtys和Locations的结果表。一个项目可以位于多个位置,因此单个项目可以有四行,每行都是自己的位置,具有自己的数量。例如:
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 |
---------------------------
最好的方法是什么,我能在一个查询中完成所有操作吗?谢谢!
答案 0 :(得分:1)
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
您在此处所做的是使用您作为表格查询的结果来查询总和。 可以使用查询的每个结果,就像它是数据库中的表一样。
答案 1 :(得分:1)
这是一个基本的聚合查询。如果您要有效地使用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