【发布时间】:2018-04-15 05:06:22
【问题描述】:
Oracle 12cR1 - 我将一个复杂的业务流程放入查询中。 一般来说,该过程将是
with t1 as (select CATEGORY, PRODUCT from ... )
select <some manipulation> from t1;
t1 -aka 第一行的输出 - 将如下所示:
CATEGORY PRODUCT
Database Oracle, MS SQL Server, DB2
Language C, Java, Python
我需要 SQL 查询的第二行(也称为操作)来保留 CATEGORY 列,并在逗号上拆分 PRODUCT 列。输出需要看起来像这样
CATEGORY PRODUCT
Database Oracle
Database MS SQL Server
Database DB2
Language C
Language Java
Language Python
我查看了几个不同的 CSV 拆分选项。我不能使用 DBMS_Utility.comma_to_Table 函数,因为它对特殊字符或以数字开头有限制。我找到了一个不错的 TABLE 函数,它可以将字符串转换为单独的行,称为 f_convert。这个函数在 StackOverflow 上大约在页面 here 的 1/3 处。
因为这是一个表函数,所以它被这样调用......并且会像预期的那样给我 3 行。
SELECT * FROM TABLE(f_convert('Oracle, MS SQL Server, DB2'));
如何处理这个 TABLE 函数,因为它是一个“列函数”?虽然这是完全不正确的 SQL,但我正在寻找类似的东西
with t1 as (select CATEGORY, PRODUCT from ... )
select CATEGORY from T1, TABLE(f_convert(PRODUCT) as PRODUCT from t1;
任何帮助表示赞赏...
【问题讨论】:
-
这篇文章可能会有所帮助 - stackoverflow.com/a/35602396/7613110