Oracle sql 查询:动态填充的数据透视表(提前)

2024-01-15

我需要展平一个表,但这里是棘手的部分,列是动态的,并且当添加包含新 ID 的新记录时查询应该可以工作。

这是我的工作查询(简化了 IN 这实际上是数百个值):

SELECT *
FROM   (select qv.respnr, sq.question_id, qv.question_value
from survey_question sq, question_values qv
where qv.question_id = sq.question_id
and sq.survey_id = 1
order by qv.respnr, page, ranked)
PIVOT (
MAX(question_value)        --<-- pivot_clause
FOR question_id          --<-- pivot_for_clause
IN (346 as c346,347 as c347)
)

我想更换IN (346 as c346,347 as c347)像这样的东西:

SELECT mq.question_id
  FROM meta_question mq, survey_question sq2
 WHERE sq2.survey_id = 1
   AND mq.question_id = sq2.question_id
 ORDER BY page, ranked

知道如何做到这一点吗?

我注意到 IN 不能简单地用 select 语句来归档,所以这不起作用:

IN (SELECT mq.question_id
      FROM meta_question mq, survey_question sq2
     WHERE sq2.survey_id = 1
       AND mq.question_id = sq2.question_id
     ORDER BY page, ranked)

SQL中所有列的名称和类型需要在编译时知道,这里你必须使用动态SQL http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#CACDDACH因为您希望改变列数取决于数据.

如果您使用 PL/SQL,则可以使用参考光标 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#i13057:

DECLARE
   l_rc            SYS_REFCURSOR;
   l_dynamic_query VARCHAR2(32000);
BEGIN
   FOR cc IN (SELECT mq.question_id
                FROM meta_question mq, survey_question sq2
               WHERE sq2.survey_id = 1
                 AND mq.question_id = sq2.question_id
               ORDER BY page, ranked) LOOP
      -- build dynamic query here
   END LOOP;
   OPEN l_rc FOR '
      SELECT *
        FROM (SELECT qv.respnr, sq.question_id, qv.question_value
                FROM survey_question sq, question_values qv
               WHERE qv.question_id = sq.question_id
                 AND sq.survey_id = 1
               ORDER BY qv.respnr, page, ranked) 
               PIVOT ( MAX (question_value) --<-- pivot_clause
                       FOR question_id --<-- pivot_for_clause
                        IN (' || l_dynamic_query || ')
                      )';
    -- process l_rc (LOOP..FETCH..CLOSE)
END;

您还可以使用DBMS_SQL http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm#BHCIBJBG.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle sql 查询:动态填充的数据透视表(提前) 的相关文章

  • 根据 Oracle SQL 中的营业时间计算时间

    我希望根据工作时间计算任务开始和结束之间的时间 我有以下示例数据 TASK START TIME END TIME A 16 JAN 17 10 00 23 JAN 17 11 35 B 18 JAN 17 17 53 19 JAN 17
  • Oracle 中的函数与过程

    Oracle 中函数和过程的主要区别是什么 如果我可以用函数完成所有事情 为什么我必须使用过程 如果我无法在sql语句中调用过程 好吧 我会编写一个函数来完成相同的工作 过程不返回值 好的 在任何 dml 操作后我将仅返回 sql rowc
  • Oracle ODP.net 托管驱动程序与非托管驱动程序

    托管和非托管 Oracle ODP Net 驱动程序之间是否存在任何性能基准 即 除了架构 部署简单性之外 迁移到托管驱动程序是否有任何优势 我想分享一些结果 我认为与部署的简便性相比 性能上的小缺陷是值得的 Note seg意味着秒 对于
  • 将 OraclePreparedStatement 与 DBCP 连接结合使用

    我正在尝试使用 dbcp 框架为我的 oracle 服务器创建一个连接池 我用过这个tutorial http web archive org web 20120615100115 http www freshblurbs com 80 j
  • T-SQL:如何使用 SELECT 创建表?

    在 oracle 中 您可以发出 create table foo as select from bar 等效的 T SQL 语句是什么 您可以使用SELECT INTO http msdn microsoft com en us libr
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • Oracle - 使用 DBMS_MVIEW.REFRESH 刷新“REFRESH FORCE ON DEMAND”视图时会发生什么

    我有以下物化视图 CREATE MATERIALIZED VIEW TESTRESULT ON PREBUILT TABLE WITH REDUCED PRECISION REFRESH FORCE ON DEMAND WITH PRIMA
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • Oracle:如何确定“AFTER ALTER”触发器中对象的新名称?

    假设我有一个AFTER ALTER在我的 Oracle 数据库上触发并重命名一些数据库对象 ALTER RENAME TO 在触发器中 我如何确定new数据库对象的名称 看来ORA DICT OBJ OWNER ORA DICT OBJ N
  • 对 PLSQL 中的每个表执行

    我想要所有表中匹配特定名称条件的记录数 这是我构建的 SQL Declare SQLStatement VARCHAR 8000 BEGIN SELECT SELECT COUNT FROM Table Name INTO SQLState
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 在 SELECT IN 中使用 Oracle 参数时出现问题

    我在将一串数字插入sql查询时遇到问题 SELECT FROM tablename a WHERE a flokkurid IN 3857 3858 3863 3285 ORDER BY sjodategund rodun or SELEC
  • 我怎样才能知道oracle 9i中哪些值是数字

    我有这个包含 varchar 的数据库 我想知道哪些记录保存数值 我试过REGEXP COUNT和其他 但我在 9i 上运行 我认为这是针对 10g gt 我怎样才能实现这个目标 I tried select to number my co
  • OracleDataSource.getConnection 是线程安全的吗?

    我以为找到这个答案很容易 但并不是那么容易 有谁知道 OracleDataSource getConnection 方法是否是线程安全的 我不是指它返回的 Connection 对象 而是指 getConnection 本身的调用 具体来说
  • 如何在express中动态渲染/加载页面?

    我需要使用express gt 3 0 框架动态加载 渲染nodejs v1 8 15 中页面的一部分 一般来说 我想创建一个单页应用程序 我在页面顶部有一个带有链接的菜单 单击链接将更改下面的内容 就像 AJAX 页面加载一样 例如 gt
  • 从函数内的 SELECT 返回一个变量

    我正在尝试创建一个返回 varchar 的函数 其中一个字段形成一个选择 即聚合字段 我收到下一个错误 ORA 01422 exact fetch returns more than requested number of rows 我的理
  • Bash 中的动态变量名称

    我对 bash 脚本感到困惑 我有以下代码 function grep search magic way to define magic variable 1 ls tail 1 echo magic variable 1 我希望能够创建一
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 通知设置的数据库设计

    用户可以打开或关闭 他的通知设置 帐户 用于通知 例如 更改帐户资料信息 收到新消息等 通知可以通过电子邮件或手机 推送或短信 发送 用户可以只有 1 封电子邮件和多个手机设备 有什么方法可以改进以下数据库设计或者您会采取不同的方式吗 让我

随机推荐

  • OSX:当文件出现在文件夹中时执行bash脚本

    我正在尝试编写自己的屏幕截图上传器脚本 我快到了 OSX 自动将屏幕截图上传到 imageBin 并将 URL 放入剪贴板 https stackoverflow com questions 21371254 osx automatical
  • 如何配置 SCP/SFTP 文件存储?

    我的 Laravel 应用程序应该将文件复制到另一个远程主机 远程主机只能通过带有私钥的 SCP 进行访问 我想配置一个新的文件存储 https laravel com docs 5 5 filesystem 与FTP类似 https la
  • 将图像从 FilePicker/Intent 复制到另一个目录

    我正在尝试将从 Intent 收到的图像复制到另一个目录 但我还无法让它工作 需要帮忙 我的日志猫 04 29 14 56 22 778 31620 31620 com example krupal sqlitetest I Choreog
  • Elasticsearch 不同的过滤器值

    我在 elasticsearch 中有一个大型文档存储 并且想要检索不同的过滤器值以显示在 HTML 下拉列表中 一个例子是这样的 name John Doe deparments name Accounts name Management
  • ASP.NET MVC 和存储库模式理解

    所以我对 ASP NET MVC 和界面设计非常陌生 我问了很多问题 读了很多文章 试图弄清楚这一切 由于工作危机 我被要求尽我所能并学习这个环境 虽然理解起来很令人沮丧 但我正在慢慢理解它 I have created an image
  • 如何从具有相同键和值的两个数组中删除值?

    我有两个数组 array1 array param1 demo param2 some param3 array2 array value1 demo value2 some value3 我想比较这两个数组并删除所有重复值 最后 我想要这
  • 只从套接字接收一个字节

    我使用 python 编写了一个服务器程序 我试图获取一个字符串 但我只得到一个字符 我如何接收字符串 def handleclient connection while True rec connection recv 200 if re
  • 使用可运行的同一实例初始化两个线程

    使用同一个可运行对象实例初始化两个线程是不是不好的编程 使用可运行对象的单独实例进行初始化会有什么区别 并且同一可运行对象实例共享内存位置与性能有什么关系吗 public static void main String args throw
  • NPM-AUDIT 发现高漏洞。我应该做些什么?

    npm audit运行我的项目并得到这个 高指令注入 Angular devkit build Angular dev 的依赖关系 路径 angular devkit build angular gt ngtools webpack gt
  • HTML 嵌套规则到底在哪里? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人可以提供一个包含所有 HTML 最好是 HTML5 嵌套规则的文档的链接吗 例如 你不能把 div
  • 控制台2种颜色晒伤

    我正在尝试使用 Console2 在 Windows 7 电脑上使用 Solarized 颜色 但我无法让颜色正常工作 我尝试按照建议更改 console xml 中的条目here https github com stevenharman
  • 实现 ICollectionViewLiveShaping

    How is ICollectionViewLiveShaping为了过滤的目的而实施 是不是类似 public ICollectionView WorkersEmployed get set WorkersEmployed new Col
  • 如何将SQL Server查询结果的数据转换为JSON格式?

    我刚刚开始了解 Ajax 和 JSON 格式 我正在构建一个非常简单的地址簿 因此 为了简单起见 假设我有一个表有 3 列 Name Email and Phone 我的javascript jquery不是刚学的最好 但我想将从我的SQL
  • 为什么这不起作用?使用鼠标指针推动盒子

    我是 JavaScript 的初学者 试图制作一个简单的脚本 使用鼠标指针推动一个盒子 但不幸的是由于某种原因它不起作用 我希望你能帮助我 这个脚本真的很原始 到现在为止只从左边推动盒子 索引 html
  • 标记为已弃用的第三方类

    我有一些第三方库Foo与类FooBar 我认为那个班级FooBar设计得很糟糕 我想写自己的MyBar作为适配器模式 可以标注原件吗FooBar as Deprecated而不修改其代码 deprecated http download o
  • 从普通的 .aspx 页面启动 ASP MVC 项目

    我有一个在 NET 4 5 上运行的现有 ASP NET 网站 我需要将 ASP MVC 4 项目 它自己的全功能 Web 应用程序 集成到其中 以便当用户导航到某个页面时 ASP MVC 应用程序在该页面内启动 几乎就像在一个iframe
  • 在运行时替换类中的方法调用

    问题我正在使用 Fitnesse 来运行一些自动化测试 有一个名为 TableTable 的类 如果对其进行增强 我可以做一些很酷的事情 我需要做的是改变方法appendInstructions 这个类的 由于 Fitnesse 显式查找
  • WH_MOUSE 和 WH_MOUSE_LL 挂钩之间有哪些区别?

    我发现WH MOUSE并不总是被调用 问题可能是我正在使用WH MOUSE并不是WH MOUSE LL 代码 class MouseHook public static signal
  • 资产被过滤掉并且不会被提供[重复]

    这个问题在这里已经有答案了 资产被过滤掉并且不会被提供 添加Rails application config assets precompile w login js to config initializers assets rb并重新启
  • Oracle sql 查询:动态填充的数据透视表(提前)

    我需要展平一个表 但这里是棘手的部分 列是动态的 并且当添加包含新 ID 的新记录时查询应该可以工作 这是我的工作查询 简化了 IN 这实际上是数百个值 SELECT FROM select qv respnr sq question id