`
zzhonghe
  • 浏览: 248224 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

11g新特性 pivot&unpivot 的行列转换

    博客分类:
  • DB
 
阅读更多
笔记如下:

--求所有BR中,曾经有大于2次状态是Closed, 并且至少做过一次Unpaid的BR集合
select * from(
select customer_trx_id, status from ar_transaction_history_all
)
pivot 
(
    count(status)
    for status in ('CLOSED' as "CLOSED",'INCOMPLETE' as "INCOMPLETE",'UNPAID' as "UNPAID",'CANCELLED' as "CANCELLED",'PENDING_REMITTANCE' as "PENDING_REMITTANCE",'PENDING_ACCEPTANCE' as "PENDING_ACCEPTANCE")
)
where CLOSED >2 and UNPAID > 0


--先建一个表,显示BR在所有状态的统计次数
create table ar_trx_history_all_matrix as
(
select * from(
select customer_trx_id, status from ar_transaction_history_all
)
pivot 
(
    count(status)
    for status in ('CLOSED' as "CLOSED",'INCOMPLETE' as "INCOMPLETE",'UNPAID' as "UNPAID",'CANCELLED' as "CANCELLED",'PENDING_REMITTANCE' as "PENDING_REMITTANCE",'PENDING_ACCEPTANCE' as "PENDING_ACCEPTANCE")
)
)


select * from ar_trx_history_all_matrix;

--以ar_trx_history_all_matrix为基础,求所有BR中, 最大变更次数的状态,和最小变更次数状态相差11次以上的BR的集合 (列转行)

select * from (
  select customer_trx_id, max(state_count) max_value, min(state_count) min_value from (
       select * from ar_trx_history_all_matrix
       unpivot
       (
              state_count
              for state_code in ("CLOSED","INCOMPLETE","UNPAID","CANCELLED","PENDING_REMITTANCE","PENDING_ACCEPTANCE")
       )
  )  where state_count >0 group by customer_trx_id
) where max_value-min_value>11

分享到:
评论

相关推荐

    SQL行列转换 Pivot UnPivot

    SQL 行列转换 Pivot UnPivot SQL 行列转换是指将表格中的行数据转换为列数据,或者将列数据转换为行数据。Pivot 和 UnPivot 是 SQL Server 2005 中引入的两个语法,用于实现行列转换。 Pivot Pivot 语法的主要...

    枢纽表达式PIVOT和UNPIVOT的简单用法,sql server 2005,列转成行

    枢纽表达式PIVOT和UNPIVOT是SQL Server 2005中新增的关系运算符,用于实现行列的旋转。本篇文章将介绍PIVOT和UNPIVOT的简单用法,并提供实例代码。 一、枢纽表达式PIVOT和UNPIVOT的概念 PIVOT和UNPIVOT是SQL ...

    pivot与unpivot函数

    pivot 与 unpivot 函数是SQL05新提供的2个函数 灰常灰常的实用

    pivot_unpivot

    在Oracle 11g中引入了两项新功能:`PIVOT` 和 `UNPIVOT`,这两项功能使得在SQL中进行数据的行列转换变得更加简单和直观。这些操作特别适用于报表开发,能够帮助用户快速地将数据按照特定的需求重新组织。 #### 二、...

    ORACLE 10g 的行列转换(学生科目成绩)测试题

    除了PIVOT和UNPIVOT,还可以通过CASE语句和GROUP BY子句实现行列转换。例如,如果我们没有PIVOT功能,也可以这样编写SQL: ```sql SELECT student_id, MAX(CASE WHEN subject = 'Math' THEN score ELSE NULL END)...

    SQL 2008行列转换的pivot

    #### 知识点一:行列转换(Pivot)的概念与应用场景 在数据库查询中,有时我们需要将数据表中的行转换为列,或者将列转换为行,这种操作被称为行列转换。行列转换在报表、统计分析等场景中非常常见,它可以帮助我们...

    Practical PowerPivot & DAX Formulas for Excel 2010

    ### 实用PowerPivot与DAX公式在Excel 2010中的应用 #### 标题解析:实用PowerPivot与DAX公式在Excel 2010中的应用 本书标题明确了其主要内容是关于如何在Microsoft Excel 2010环境中有效使用PowerPivot插件及其...

    Oracle行列转换

    首先,我们有`PIVOT`操作,它是Oracle 11g引入的新特性,用于将行数据转换为列数据。例如,假设我们有一个销售数据表,包含产品ID、年份和销售额三列。通过`PIVOT`,我们可以将不同年份的销售额转换为每种产品的列,...

    SQL行列转换

    部分SQL版本,如Oracle和SQL Server,提供了内置的PIVOT和UNPIVOT关键字,使得行列转换更为直接。例如,你可以直接在查询中使用PIVOT关键字指定要转换的列和生成的新列,而UNPIVOT关键字则会将多列数据转换为行。 ...

    table行列数据转换

    在数据库中,Pivot和Unpivot操作用于行列转换。虽然题目强调避免使用SQL,但在某些情况下,如果数据源是数据库,使用SQL进行转换可能更为高效。C#可以调用ADO.NET执行这样的查询,然后在代码中处理结果。 5. **第...

    Oracle行转列之pivot

    从Oracle 11g版本开始,引入了PIVOT和UNPIVOT关键字,以支持显式的查询转换,即从行数据转换为列数据,或从列数据转换为行数据,进而生成交叉表格式的结果。这一技术尤其适用于报表生成,使得能够使用SQL语句针对...

    行列转换

    在Oracle数据库系统中,行列转换主要通过两种方法实现: pivot 和 unpivot 操作。Pivot操作(列转行)用于将特定的行数据转换为列,而unpivot操作(行转列)则反之。 1. Pivot操作:Oracle提供了一种内建的PIVOT...

    oracle sql 行列转换

    在Oracle SQL中,行列转换是一种常见的数据操作需求,主要用于将数据表中的行转换为列,或将列转换为行,以此来满足不同的数据展示或分析需求。这种转换在处理多维度数据、汇总数据或是进行复杂查询时特别有用。下面...

    excel行列转换程序

    通过对`PIVOT`和`UNPIVOT`这两个SQL Server 2005新增功能的学习,我们可以更灵活地处理数据的行列转换问题,这对于提高数据分析效率、优化报表展示具有重要意义。无论是从行到列的转换,还是从列到行的转换,都有助...

    oracle 11g新特性

    ### Oracle 11g 新特性解析 #### 一、引言 Oracle 11g作为Oracle数据库的一个重要版本,引入了一系列新的特性和改进,旨在提高数据处理能力、增强安全性、简化管理和提升性能。本文将详细介绍Oracle 11g中与数据库...

    浅析SQL语句行列转换的两种方法 case…when与pivot函数的应用

    `PIVOT` 是一种专用于行列转换的函数,它将一列的值转换为新列名,同时使用聚合函数处理转换后的数据。在SQL Server中,`PIVOT` 的用法如下: ```sql SELECT Student AS '姓名', AVG(语文) AS '语文', AVG...

    sql server 行列转换

    #### 一、行列转换概述 在处理数据库查询时,我们经常会遇到需要将表中的行数据转换为列数据的需求,这种操作通常被称为“行列转换”。例如,当我们需要汇总不同类别的数据并将其展示在同一行的不同列中时,就需要...

Global site tag (gtag.js) - Google Analytics