`

Oracle 分组排序聚合之group by

 
阅读更多

一个人显示一行记录,一次性待遇和定期待遇在同一行。

发来一个查询语句如下,很长。别吓坏了,用的东西不多,实质就是 分组,聚合

 

SELECT C.*, (C.AAE019OLD + C.AAE019CE) AAE019NEW
  FROM (SELECT T.AAZ257,
               T.AAC001,
               T.AAB001,
               T.AAC147,
               T.AAC003,
               T.AAC004,
               T.AAC012,
               T.AAA027,
               T.AAC006,
               T.AAC007,
               T.AAC055,
               T.AIC162,
               T.AIC161,
               T.AAC020,
               T.BIC215,
               T.AAE200,
               T.AAE210,
               T.AAC081,
               T.AAC085,
               T.AAC064,
               T.AAC014,
               T.AAC015,
               (SELECT SUM(A.AAE019)
                  FROM AC61 A, AA17 B
                 WHERE A.AAA036 = B.AAA036
                   AND A.AAZ257 = T.AAZ257
                   AND B.BAZ057 = 100000
                   AND A.AAE041 <=
                       (CASE WHEN T.AAE210 > 201701 THEN T.AAE210 ELSE 201701 END)
                   AND A.AAE042 >=
                       (CASE WHEN T.AAE210 > 201701 THEN T.AAE210 ELSE 201701 END)) AAE019OLD,
               decode(t.dqflag, '1', SUM(T.AAE188)) AAE019CE,
               decode(t.dqflag, '0', SUM(T.AAE188)) aae019ycxce
          FROM T_YLZCTZ T
         WHERE T.BIC226 = 1000000000000463
         GROUP BY T.AAZ257,
                  T.AAC001,
                  T.AAB001,
                  T.AAC147,
                  T.AAC003,
                  T.AAC004,
                  T.AAC012,
                  T.AAA027,
                  T.AAC006,
                  T.AAC007,
                  T.AAC055,
                  T.AIC162,
                  T.AIC161,
                  T.AAC020,
                  T.BIC215,
                  T.AAE200,
                  T.AAE210,
                  T.AAC081,
                  T.AAC085,
                  T.AAC064,
                  T.AAC014,
                  T.AAC015,
                  t.dqflag) C

 关键点:

decode(t.dqflag, '1', SUM(T.AAE188)) AAE019CE,

group by 语句除了 group by后面跟的项目,其它出现在查询中的项都必须是聚合函数。

去掉 group by 后的 t.dqflag ,

查询变为 sum((case when t.dqflag='1' then 0 else t.aae188 end)) AAE019CE,

 

当定期时 只对非1 的进行sum  

当非定期时 只对非0的进行sum。

 

 

 

 

 

分享到:
评论

相关推荐

    oracle分组排序统计高级用法

    #### 一、Oracle分组排序和统计概述 在Oracle数据库中,实现分组排序和统计是一项常见的需求,主要用于处理大量的数据,并从中提取有价值的信息。通过合理运用SQL语句,特别是`GROUP BY`、`ORDER BY`以及分析函数等...

    Oracle中分组查询group by用法规则详解

    在Oracle数据库中,`GROUP BY`子句是一个关键的SQL元素,它允许用户根据一个或多个列的值将数据分组,以便对每个组进行聚合计算。以下是对`GROUP BY`用法的详细解释和规则: 1. **基本用法**: `GROUP BY`子句通常...

    Mysql利用group by分组排序

    MySQL的group by与Oracle有所不同,查询得字段可以不用写聚合函数,查询结果取得是每一组的第一行记录。 利用上面的特点,可以利用mysql实现一种独特的排序; 首先先按某个字段进行order by,然后把有顺序的表进行...

    Oracle多行记录合并

    - **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...

    group by的详解

    在Oracle数据库中,`GROUP BY`语句是用于将数据行根据一个或多个列的值进行分组,以便对每个组执行聚合函数(如`SUM`、`COUNT`、`AVG`等)。`GROUP BY`的主要作用在于将具有相同列值的数据归类到一起,从而可以对每...

    order_by_、group_by_、having的用法

    在SQL命令格式中,通常的顺序是:`SELECT`、`INTO`(如果需要创建新表)、`FROM`、`WHERE`(如果需要过滤数据)、`GROUP BY`、`HAVING`(如果需要分组过滤)、`ORDER BY`(如果需要排序)。需要注意的是,`HAVING`和...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    Oracle数据库在处理多行记录合并、连接和聚合字符串时,有多种方法,下面将详细介绍其中的几种常见技术。 1. 被集合字段范围小且固定型 这种方法适用于字段值有限且已知的情况。通过使用`DECODE`函数,我们可以为每...

    oracle group by语句实例测试

    Oracle数据库中的`GROUP BY`语句是SQL查询中用于数据分组的重要部分,它允许我们对数据进行聚合操作,如计算总和、平均值、最大值等。在本例中,我们将通过具体的实例来理解`GROUP BY`语句的用法。 首先,创建了一...

    Oracle实现对查询结果每N条再次分组博客所用数据库

    标题中的“Oracle实现对查询结果每N条再次分组”是指在Oracle数据库中进行数据处理时,使用SQL语句对查询结果进行分组,而这里的“每N条再次分组”通常指的是使用GROUP BY子句配合ROW_NUMBER()、PARTITION BY等函数...

    oracle中使用group by优化distinct

    优化`DISTINCT`的一种方法是使用`GROUP BY`子句,它可以将相同的数据分组,然后对每个组进行聚合操作,例如计算数量或求和。在某些情况下,可以将`DISTINCT`转换为`GROUP BY`,并结合聚合函数如`COUNT()`,以达到...

    oracle分析函数参考手册

    GROUP BY t.calendar_month_number ORDER BY t.calendar_month_number; ``` **解释**:在这个例子中,`CORR`函数计算了每个月销售收入和单位销售量的相关系数。通过`OVER (ORDER BY t.calendar_month_number)`子句...

    oracle材料

    本文将深入探讨在"Oracle材料"中提到的一些关键知识点,包括`listagg`函数、Oracle SQL Developer的使用、数据导入导出、远程登录、`rownum`与分组排序以及`wm_concat`函数。 1. **Listagg函数**:`listagg`是...

    oracle 入门

    **GROUP BY** 是SQL语言中的一个重要概念,主要用于将数据按照一个或多个列的值进行分组,以便进行聚合计算。它常与聚合函数如SUM(), COUNT(), AVG(), MAX(), MIN()等一起使用。 **基本语法**: ```sql SELECT ...

    【Oracle】LISTAGG函数的使用.pdf

    LISTAGG(合并字段, 连接符) WITHIN GROUP(ORDER BY 合并字段的排序) OVER(PARTITION BY 分组字段) 2. 作为聚合函数,类似于 sum()、count()、avg() 等函数,使用方法相似: LISTAGG(合并字段, 连接符) WITHIN ...

    oracle-高级查询

    在 Oracle 中,分组和聚合函数是高级查询的基础。分组函数可以将数据分组,并计算每组的统计信息。聚合函数可以对分组后的数据进行统计计算。例如,计算每个部门的员工数可以使用以下 SQL 语句: `Select deptno, ...

    Oracle Press - Oracle Database 11g SQL

    7. **分组与聚合函数**:介绍GROUP BY、HAVING和聚合函数(如COUNT、SUM、AVG、MAX、MIN)的应用,用于统计和分析数据。 8. **窗口函数**:探讨ROW_NUMBER、RANK、DENSE_RANK、LEAD、LAG等窗口函数的使用,用于行级...

    oracle分析函数.doc

    它们允许用户在单个SQL查询中执行聚合操作,同时保持行的原始顺序,这是传统的GROUP BY函数无法实现的。分析函数的主要优势在于它们能够提供更灵活的数据处理和分析能力,特别适用于OLAP(在线分析处理)系统。 1. ...

Global site tag (gtag.js) - Google Analytics