oracle中使用sql的动态列

2023-12-22

我有以下表格示例。 Thera可以是无限的分支机构和客户。我需要对这些分支机构进行分组并计算其客户数量,然后用不同的列显示它。

BRANCHNAME  CUSTOMERNO
100         1001010
100         1001011
103         1001012
104         1001013
104         1001014
104         1001015
105         1001016
105         1001017
106         1001018

请注意,可以有无限的分支机构和客户,查询必须不仅在这种情况下有效。

在这种情况下,可接受的结果是:

100 103 104 105 106
 2   1   3   2   1

SQL 数据示例

    select '100' BranchName,'1001010' CustomerNo from dual   UNION ALL 
    select '100' BranchName,'1001011' CustomerNo from dual   UNION ALL 
    select '103' BranchName,'1001012' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001013' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001014' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001015' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001016' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001017' CustomerNo from dual   UNION ALL 
    select '106' BranchName,'1001018' CustomerNo from dual   

我认为虽然相当复杂,但还是可以写一个返回变量结构的流水线表函数 http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4843682300346852395#5421020800346627246。您的管道表函数将使用 Oracle Data Cartridge 接口和 AnyDataSet 类型的魔力在运行时返回动态结构。然后您可以在后续 SQL 语句中使用它,就像它是一个表一样,即

SELECT *
  FROM TABLE( your_pipelined_function( p_1, p_2 ));

更多讨论相同示例实现的参考资料

  • 动态 SQL 透视 http://technology.amis.nl/2006/05/24/dynamic-sql-pivoting-stealing-antons-thunder/
  • The 实现接口方法 http://docs.oracle.com/cd/E11882_01/appdev.112/e10765/pipe_paral_tbl.htm#ADDCI4701Oracle Data Cartridge 开发人员指南的部分
  • Method4. https://github.com/method5/method4下载并安装开源PL/SQL代码后,以下是完整的实现:

    --Create sample table.
    create table branch_data as
    select '100' BranchName,'1001010' CustomerNo from dual   UNION ALL 
    select '100' BranchName,'1001011' CustomerNo from dual   UNION ALL 
    select '103' BranchName,'1001012' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001013' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001014' CustomerNo from dual   UNION ALL 
    select '104' BranchName,'1001015' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001016' CustomerNo from dual   UNION ALL 
    select '105' BranchName,'1001017' CustomerNo from dual   UNION ALL 
    select '106' BranchName,'1001018' CustomerNo from dual;
    
    --Create a dynamic pivot in SQL.
    select *
    from table(method4.dynamic_query(
        q'[
            --Create a select statement
            select
                --The SELECT:
                'select'||chr(10)||
                --The column list:
                listagg(
                    replace(q'!sum(case when BranchName = '#BRANCH_NAME#' then 1 else 0 end) "#BRANCH_NAME#"!', '#BRANCH_NAME#', BranchName)
                    , ','||chr(10)) within group (order by BranchName)||chr(10)||
                --The FROM:
                'from branch_data' v_sql
            from
            (
                --Distinct BranchNames.
                select distinct BranchName
                from branch_data
            )
        ]'
    ));
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle中使用sql的动态列 的相关文章

随机推荐

  • 如何使用 Gradle 在没有第一个目录的情况下提取?

    我正在尝试提取一个不带 PARENT 目录的依赖 zip 文件 在使用 Gradle 提取时排除一些文件 这是我所拥有的 这有效 但感觉不对 我希望有更好的方法来做到这一点 我正在提取的 Zip 文件 jar tf parent folde
  • 是否定义了宏 X?

    我尝试编译the code http cpp sh 8vrep使用选项 C 14 define X static cast
  • 我不知道我错过了什么(乌龟)

    我在用着Trinket运行我的python 我已经修改它好几天了 它一直给我这个错误 Traceback most recent call last File tmp sessions 5ecd67058b43cfc0 main py li
  • iframe 标签内的 html 的用途是什么?

    我在某处读过一次 它是后备内容 但当 src 加载失败时它不会显示 p text p In the 当前规格 https html spec whatwg org multipage iframe embed object html the
  • vb.net datagridview 的问题

    您好 下面的代码在单击特定单元格时打开领导者的详细视图 我试图做到这一点 以便当单击一个单元格时 它会将具有所选单元格的 LeaderID 的任何事件的行位置添加到数组 le 中 然而这行代码 If dgdEvents Rows n Cel
  • 超出表达式递归级别

    不知道为什么下面的例子会出现错误 a 1 a gt 0 echo y echo n y a x a gt 0 echo y echo n n a a a gt 0 echo y echo n bash a expression recurs
  • 使用 Maven 在 Tomcat 中动态运行 WAR,如何添加类路径条目以便只有 Tomcat 可以看到它们?

    场景是这样的 我有一个 web 应用程序 我想使用 tomcat maven plugin 动态运行tomcat 运行目标 http mojo codehaus org tomcat maven plugin run mojo html 问
  • 如果应用程序处于 GC 中,如何可靠地获取 JVM 核心转储?

    我正在尝试查找 java 应用程序中内存泄漏的原因 我需要为某个进程获取堆转储longGC 循环 Jmap 在这种情况下不起作用 因为应用程序被挂起 而且堆非常大 不幸的是 jmap 在我获取的核心转储上抛出 UnknownOopExcep
  • xhgui不保存任何数据

    我已经在 Ubuntu 计算机上安装了所有先决条件 并将以下内容添加到我的 apache 虚拟主机文件中 php admin value auto prepend file var www xhgui external header php
  • 使用 Doxygen 的 Qt 风格文档? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 如何使用 Doxygen 生成 Qt 风格的文档 Trolltech 的 C Qt 或 Riverba
  • trigger.io - 无法再创建 ipa 文件

    我通常使用trigger io 生成适用于iOS 的ipa 文件 现在 当我想生成文件时 我收到以下错误消息 运行 usr bin codesign 时失败 codesign allocate 对象 Users mherceg Deskto
  • 使用 vb.net 或 c# 的 Textbox_KeyPress 事件

    我的要求是我正在尝试为我的母语开发一个文本编辑器 也就是说 我正在尝试使用 unicode 字符开发泰米尔语文本编辑器 当我按下键盘上的按键 例如英文字符 k时 我想替换两个字符 例如 H0b95 H0bcd 我如何实施这个概念 是否可能
  • 在 MySQL 中搜索表情符号

    我有一个看起来像这样的字符串 现在 当我的应用程序将此字符串推入其 utf8 mysql 数据库列时 它在 MySQL CLI 中看起来像这样 如果我选择convert mystring using utfmb4 它看起来仍然是这个样子 如
  • 如何惯用地打破嵌套并行 (OpenMP) Fortran 循环?

    这是顺序代码 do i 1 n do j i 1 n if some condition i j then result here s result return end if end do end do 除了以下之外 是否有更清晰的方法来
  • /usr/bin/ld:错误:找不到-lboost_unit_test_framework

    这个标题提出了很多问题 但我发现没有适合我的答案 我有以下代码 define BOOST TEST DYN LINK define BOOST TEST MODULE Hello include
  • 如何在 Intellij IDEA 中关闭注释的错误验证?

    我有一个使用 Eclipse 的开发人员 它会在我们的 JUnit 测试中自动在各个位置插入注释 但是 当我在IDEA中打开测试时 注释带有红色下划线 并且注释上写着 实现接口方法时不允许 Override 我不太关心注释 因此 它不允许我
  • 我是否正确使用了 IRepository?

    我希望在一个小项目中使用 IRepository 模式 如果重要的话 由 NHibernate 支持 该域是一个简单的域 故意这样让我能够专注于理解 IRepository 模式 唯一的域类是Movie 其属性为Year Genre and
  • Haskell id 函数的用途

    有哪些用途id函数 http www zvon org other haskell Outputprelude id f html在哈斯克尔 作为一个论据很有用高阶函数 http www haskell org haskellwiki Hi
  • WinRT / Win8 中的 HttpClient 缺少响应标头

    我在 Windows 8 应用程序中使用 HttpClient 它似乎故意在响应中隐藏自定义标头 例如 我们收到的响应有一个名为的自定义标头 示例标题 123 我期望响应内容中的标头将包含值为 123 的 Sample Header var
  • oracle中使用sql的动态列

    我有以下表格示例 Thera可以是无限的分支机构和客户 我需要对这些分支机构进行分组并计算其客户数量 然后用不同的列显示它 BRANCHNAME CUSTOMERNO 100 1001010 100 1001011 103 1001012