首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL SUM not SUM特定列

SQL SUM not SUM特定列
EN

Stack Overflow用户
提问于 2013-09-28 10:59:26
回答 2查看 216关注 0票数 0

如何使用数据库oracle对我的表中的列(Q.QTY)求和?SQL代码如下:

代码语言:javascript
复制
SELECT DISTINCT
M.MODEL_NO,
P.FORM_NO,
P.MODEL_NO,
TO_CHAR(TO_DATE(P.DATE_ADDED,'YYYY-MM-DD'),'MONTH'),
Q.FORM_NO,
Q.STATUS_QTY,
SUM(Q.QTY) OVER (PARTITION BY P.FORM_NO ORDER BY P.FORM_NO
RANGE UNBOUNDED PRECEDING) QTY

FROM
SEIAPPS_MODEL M, SEIAPPS_PRODUCTION_STATUS P, SEIAPPS_QTY Q

WHERE
P.FORM_NO = Q.FORM_NO AND P.MODEL_NO = M.MODEL_NO AND M.MODEL_NO = '15' AND P.DATE_ADDED LIKE '2013-05%' AND Q.STATUS_QTY = 'OK';

当我在TOAD中查询这个SQL代码时,它将显示所有数据,而不是Q.QTY列中所有数据的总和。

我想要的是这样的:

代码语言:javascript
复制
QTY
5000 (example value)

敬请指教。谢谢

EN

回答 2

Stack Overflow用户

发布于 2013-09-28 11:03:31

最简单的方法是将查询用作派生表,并将所有列的总和相加:

代码语言:javascript
复制
SELECT SUM(MODEL_NO1) + SUM(FORM_NO1) + SUM(MODEL_NO2) + SUM(TOCHAR) + 
    SUM(FORM_NO2) + SUM(STATUS_QTY) + SUM(QTY) AS SUM_ALL
FROM
(
    SELECT DISTINCT
    M.MODEL_NO AS MODEL_NO1,
    P.FORM_NO AS FORM_NO1,
    P.MODEL_NO AS MODEL_NO2,
    TO_CHAR(TO_DATE(P.DATE_ADDED,'YYYY-MM-DD'),'MONTH') AS TOCHAR,
    Q.FORM_NO AS FORM_NO2,
    Q.STATUS_QTY,
    SUM(Q.QTY) OVER (PARTITION BY P.FORM_NO ORDER BY P.FORM_NO
    RANGE UNBOUNDED PRECEDING) QTY

    FROM
    SEIAPPS_MODEL M, SEIAPPS_PRODUCTION_STATUS P, SEIAPPS_QTY Q

    WHERE
    P.FORM_NO = Q.FORM_NO AND P.MODEL_NO = M.MODEL_NO AND M.MODEL_NO = '15' AND P.DATE_ADDED LIKE '2013-05%' AND Q.STATUS_QTY = 'OK'
) x

注意,您有不明确的列名和未命名的列,所以我必须给它们一个别名。

票数 0
EN

Stack Overflow用户

发布于 2013-09-28 12:04:42

我看起来你想要所有Q.QTY的总数。你正在使用一个窗口函数。更多信息请点击这里。

http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions004.htm#i81407

另外,我建议使用ANSI join语法。

代码语言:javascript
复制
SELECT DISTINCT
M.MODEL_NO,
P.FORM_NO,
P.MODEL_NO,
TO_CHAR(TO_DATE(P.DATE_ADDED,'YYYY-MM-DD'),'MONTH'),
Q.FORM_NO,
Q.STATUS_QTY,
SUM(Q.QTY) OVER (PARTITION BY P.FORM_NO ORDER BY P.FORM_NO
RANGE UNBOUNDED PRECEDING) QTY
SUM(Q.QTY) OVER() As SumOfAll -- Sum of the entire QTY column
FROM SEIAPPS_MODEL M
JOIN SEIAPPS_PRODUCTION_STATUS P
  ON P.MODEL_NO = M.MODEL_NO
JOIN SEIAPPS_QTY Q
  ON P.FORM_NO = Q.FORM_NO
WHERE
  M.MODEL_NO = '15' AND P.DATE_ADDED LIKE '2013-05%' AND Q.STATUS_QTY = 'OK';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19062735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档