仅选择SQL中多列的唯一值

时间:2014-05-25 21:34:05

标签: sql oracle string-aggregation

我必须将表中的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个字符限制。

1 个答案:

答案 0 :(得分:0)

我试过这个

WITH test AS ( SELECT 'Test | test | Test' str FROM dual ) SELECT * FROM (SELECT DISTINCT(LOWER(regexp_substr (str, '[^ | ]+', 1, rownum))) split FROM test CONNECT BY level <= LENGTH (regexp_replace (str, '[^ | ]+')) + 1 ) WHERE SPLIT IS NOT NULL;

此查询仅生成&#39; test&#39;

分割由&#39;分隔的字符串后它产生的唯一值的一些方法。 | &#39;在一列中。但是在单个SQL查询中为35个以上的列执行此操作将非常麻烦。有人可以提出更好的方法吗?