Oracle Pipe 分隔列

问题描述 投票:0回答:1

我需要根据某些条件从表中获取数据。

第1栏 第2栏
ABC|DEF|GHI|JKL|XYZ Y|Y|N|N|Y
ABC|JKL|XYZ Y|Y|N
GHI|XYZ Y|Y
GHI|JKL N|Y

如果一条记录在第 1 列中具有 ABC 或 DEF 或 JKL 或 XYZ,并且在第 2 列中对应的值为 Y 然后必须选择记录

sql oracle-database oracle10g
1个回答
0
投票

REGEXP_SUBSTR
CONNECT BY

SELECT DISTINCT t.Column1, t.Column2
FROM test_table t
JOIN (
    SELECT 
        t.ID,
        REGEXP_SUBSTR(t.Column1, '[^|]+', 1, LEVEL) AS col1,
        REGEXP_SUBSTR(t.Column2, '[^|]+', 1, LEVEL) AS col2
    FROM test_table t
    CONNECT BY LEVEL <= REGEXP_COUNT(t.Column1, '\|') + 1
      AND PRIOR t.ID = t.ID
      AND PRIOR SYS_GUID() IS NOT NULL
) s ON t.ID = s.ID
WHERE s.col1 IN ('ABC', 'DEF', 'JKL', 'XYZ') AND s.col2 = 'Y';

输出:

第1栏 第2栏
ABC|DEF|GHI|JKL|XYZ Y|Y|N|N|Y
ABC|JKL|XYZ Y|Y|N
GHI|XYZ Y|Y
GHI|JKL N|Y

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.