2017-02-09 2 views
1

У меня есть таблица с данными ниже,Свести поток логики в оракула

id cd_used 
1 trl 
1 upf 
2 upf 
3 trl 
3 trl 

я должен применить расплющить логику подачи и выводим ниже выход.

id cd_used 
1 trlupf 
2 upfonly 
3 trlonly 

Одним из метода был фильтровать таблицу, используя cd_used и в течение двух подзапросов, и результат пересекаются могут быть добавлены к trlupf, любые другие методы для осуществления этого?

+0

Для ID = 1 строк, поэтому '1 trlupf', а не' 1 upftrl'? Что определяет порядок cd_used? – RIKI

+0

не основан на каком-либо заказе, значение по умолчанию, рассмотрите «trlupf» или даже вы можете напечатать «оба» в качестве вывода, если идентификатор имеет оба кода. Я просто хочу классифицировать идентификаторы. –

ответ

1
WITH tab_temp 
    AS (SELECT 1 AS id, 'trl' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 1 AS id, 'upf' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 2 AS id, 'upf' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 3 AS id, 'trl' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 3 AS id, 'trl' AS cd_used FROM DUAL) 
    SELECT t.id, 
     LISTAGG (t.cd_used, '') WITHIN GROUP (ORDER BY t.cd_used DESC) 
      "cd_used" 
    FROM (SELECT DISTINCT 
       id, 
       CASE 
        WHEN COUNT (DISTINCT cd_used) OVER (PARTITION BY id) = 1 
        THEN 
         cd_used || 'Only' 
        ELSE 
         cd_used 
       END 
        cd_used 
      FROM tab_temp) t 
GROUP BY t.id; 

enter image description here

1
WITH tab_temp 
    AS (SELECT 1 AS id, 'trl' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 1 AS id, 'upf' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 2 AS id, 'upf' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 3 AS id, 'trl' AS cd_used FROM DUAL 
     UNION ALL 
     SELECT 3 AS id, 'trl' AS cd_used FROM DUAL) 
, aggage as 
(
select id, listagg (cd_used) within group (order by cd_used) as new_cd 
from (select distinct id, cd_used from tab_temp) 
group by id 
) 
select id, case 
      when new_cd in (select cd_used from tab_temp) then new_cd||'only' 
      else new_cd 
      end as cd_used 
from aggage   
Смежные вопросы