Проблема со структурой запроса - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть требование:

user id    full role                           
a123456    abcd:READ_ONLY     
a123456    fghi:READ_ONLY                  

Моя цель - получить обе строки, используя различное ключевое слово:

Я использую запрос ниже:

select distinct 
         user id,
         SUBSTR(full role, INSTR(full role, ':')+1) end as ROLE
from table 

но я могу достичь только одного ряда.Не могли бы вы помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Если вы хотите вывести все строки для определенных ролей, но только одну строку для других, вы можете сделать следующее:

WITH your_table AS (SELECT 'a123456' user_id, 'abcd:READ_ONLY' full_role FROM dual UNION ALL
                    SELECT 'a123456' user_id, 'fghi:READ_ONLY' full_role FROM dual UNION ALL
                    SELECT 'a123456' user_id, 'zyxw:WRITE' full_role FROM dual UNION ALL
                    SELECT 'a123456' user_id, 'vuts:WRITE' full_role FROM dual)
SELECT user_id,
       role
FROM   (SELECT DISTINCT user_id,
                        SUBSTR(full_role, INSTR(full_role, ':') + 1) AS role,
                        CASE
                          WHEN SUBSTR(full_role, INSTR(full_role, ':') + 1) = 'READ_ONLY' THEN
                           rownum
                          ELSE
                           NULL
                        END rn
        FROM   your_table)
ORDER BY user_id, ROLE;

USER_ID ROLE
------- --------------
a123456 READ_ONLY
a123456 READ_ONLY
a123456 WRITE

Это кажется немного странным;Мне было бы интересно узнать больше о том, зачем вам это нужно.

0 голосов
/ 05 февраля 2019

Может быть, граф будет делать то, что вы хотите?

select user id,
       SUBSTR(full role, INSTR(full role, ':')+1) as ROLE,
       count(*) as num_times
from table 
group by user_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...