首页 > 数据库 > mysql教程 > 如何在 Oracle SQL 中使用不同的值执行动态透视?

如何在 Oracle SQL 中使用不同的值执行动态透视?

Susan Sarandon
发布: 2025-01-24 00:57:10
原创
692 人浏览过

How to Perform Dynamic Pivots in Oracle SQL with Varying Values?

Oracle SQL动态枢轴表:应对变化值

在Oracle SQL中使用PIVOT函数时,处理IN语句中的动态值可能很棘手。本文提供一种解决方案。

Oracle的PIVOT通常需要IN语句中使用静态值字符串,例如:

<code class="language-sql">... pivot (sum(A) for B in (X))  </code>
登录后复制

但是,如果B的值存储在数据库列中并定期更新,则手动更新字符串X变得不切实际。

为了解决这个问题,我们可以使用一个技巧,它涉及创建IN字符串,然后在PIVOT查询中使用它。让我们分解一下:

步骤1:构建IN字符串

为了创建字符串,我们使用COLUMN NEW_VALUELISTAGG函数,如下所示:

<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT 
    LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
        WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
    FROM (SELECT DISTINCT myLetter FROM myTable);</code>
登录后复制

此查询构建一个类似于以下内容的字符串:

<code>'A' AS A,'B' AS B,'C' AS C</code>
登录后复制

步骤2:在PIVOT中使用字符串

现在,我们可以将此字符串添加到我们的PIVOT查询中:

<code class="language-sql">SELECT * FROM 
    (SELECT myNumber, myLetter, myValue FROM myTable)
    PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
登录后复制

限制:

虽然此方法提供了一种解决方案,但它有一个限制:连接字符串的最大长度为4000字节。因此,如果B的值数量非常多,则此方法可能不适用。

以上是如何在 Oracle SQL 中使用不同的值执行动态透视?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板