【问题标题】:DB2 SQL SUM and GROUPINGDB2 SQL 求和和分组
【发布时间】:2012-04-16 21:15:29
【问题描述】:

我在查询和分组方面遇到问题。

我需要以下输出:

officr, cbal, sname  
ABC, 500.00, TOM JONES  
ABC, 200.00, SUE JONES  
ABC TOTAL 700.00  

RAR, 100.10, JOE SMITH  
RAR, 200.05,  MILES SMITH  
RAR TOTAL 300.15  

下面的 SQL 产生错误:

[DB2 for i5/OS]SQL0122 - SELECT 列表中的列 SNAME 或表达式无效。

SELECT
    lnmast.officr,  SUM(LNMAST.CBAL), lnmast.sname
FROM
    LNMAST
WHERE LNMAST.RATCOD IN (6,7,8) AND STATUS NOT IN ('2','8')
group by lnmast.officr

【问题讨论】:

    标签: sql db2 sum grouping


    【解决方案1】:

    GROUP BY GROUPING SETS 是一个强大的数据分组/立方体工具。它允许您将非聚合数据与聚合数据组合在一个查询结果中。

    SELECT lnmast.officr,  SUM(LNMAST.CBAL), lnmast.sname
    FROM LNMAST
    WHERE LNMAST.RATCOD IN (6,7,8) 
      AND STATUS NOT IN ('2','8')
    GROUP BY GROUPING SETS ((lnmast.officr, lnmast.sname),(lnmast.officr))
    

    来自 IBM DOCS 的示例:www.ibm.com/support/knowledgecenter/en/...

      SELECT WEEK(SALES_DATE) AS WEEK,
             DAYOFWEEK(SALES_DATE) AS DAY_WEEK,
             SALES_PERSON, SUM(SALES) AS UNITS_SOLD       
      FROM SALES 
      WHERE WEEK(SALES_DATE) = 13
      GROUP BY GROUPING SETS ( (WEEK(SALES_DATE), SALES_PERSON),
                               (DAYOFWEEK(SALES_DATE), SALES_PERSON))
      ORDER BY WEEK, DAY_WEEK, SALES_PERSON
    

    这会导致:

      WEEK        DAY_WEEK    SALES_PERSON    UNITS_SOLD 
      ----------- ----------- --------------- -----------
               13           - GOUNOT                   32
               13           - LEE                      33
               13           - LUCCHESSI                 8
                -           6 GOUNOT                   11
                -           6 LEE                      12
                -           6 LUCCHESSI                 4
                -           7 GOUNOT                   21
                -           7 LEE                      21
                -           7 LUCCHESSI                 4
    

    【讨论】:

    • @henryJ 曾问为什么 lucchessi 在第 6 周只有 4 个时有 8 个。这是由于我从 IBM 站点复制和粘贴数据的错误。通过在第 7 周添加 lucchessi 的 4 来纠正它。
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    相关资源
    最近更新 更多