【发布时间】:2014-07-14 15:23:07
【问题描述】:
我必须将表中的大约 35 列连接成一个字符串。列中的数据可以在不同的情况下重复,如下所示。
COL_1
apple | ORANGE | APPLE | Orange
COL_2
GRAPE | grape | Grape
每列中的数据是用管道分隔的,我试图通过用'|' 分隔来连接每一列。我希望最终输出为"apple | orange | grape"(全部小写即可)
但目前我得到了
apple | ORANGE | APPLE | Orange | GRAPE | grape | Grape
我当前的 SQL 是
SELECT COL_1 || '|' || COL_2 from TABLE_X;
有人可以解释一下如何从每一列中提取唯一值吗?这将大大减少我的字符串长度。我当前的 SQL 超过了 Oracle 的 4000 个字符限制。
【问题讨论】:
-
你能告诉我们你用什么来得到这个结果吗?在 Oracle 中,SELECT DISTINCT LOWER(column) FROM 表将用于整理出唯一的小写值。
-
你的问题是它没有标准化。执行此操作的最简单方法是在连接之前对其进行反透视,确保数据集是唯一的,然后使用
LISTAGG()之类的字符串聚合函数将其连接起来。您的问题被标记为 SQL Server 和 Oracle。您需要它同时在 Oracle 上工作还是只在 Oracle 上工作? -
嗨 Ben,我只需要在 Oracle 中工作。批准了您的建议。
-
Hi Frazz,DISTINCT LOWER(COLUMN) 将消除跨列的不同。我想消除列中的重复项。列中的文本由 | 分隔并且在具有相同值的情况下是不同的。我只想从每列中提取唯一值。更新了我的例子
-
嗯!!哎呀错字了!!!是的,它是“苹果 | 橙子 | 葡萄”
标签: sql oracle string-aggregation