2013-05-30 5 views
0

Я хотел бы увидеть результат code_2 в resultcode_1, используя вложенный SELECT. Вы можете мне помочь? Я использую базу данных - Oracle PL/SQL Developer Спасибо большого заранееКак сделать Вложенный SELECT

code_1:

SELECT DISTINCT eventattribute1 
FROM table1 partition(m201302) 
WHERE eventattribute22 = 'EURO' 
     AND eventattribute13 = 'MC_PO_ROAM' 
     AND eventattribute14 != 'T' 
     AND event_cost != '0' 
GROUP BY eventattribute1 

code_2:

SELECT Numtodsinterval(Sum(To_char(To_date(duration, 'HH24:MI:SS'), 
          'HH24') * 
            3600 + 
                 To_char( 
            To_date(duration, 'HH24:MI:SS'), 
                 'MI') 
                 * 60 + 
            To_char(To_date(duration, 
              'HH24:MI:SS'), 'SS')), 'second') AS 
     SUMTOTAL 
FROM table1 partition(m201302) 

ответ

0

Чтобы сделать это, как вложено выбрать, вы можете просто добавить второй запрос на строку выбора первого. Он возвращает одно значение и одну строку, так что это нормально. Концептуально, это:

SELECT eventattribute1, 
     <code2> 
FROM table1 partition(m201302) 
WHERE eventattribute22 = 'EURO' 
     AND eventattribute13 = 'MC_PO_ROAM' 
     AND eventattribute14 != 'T' 
     AND event_cost != '0' 
GROUP BY eventattribute1 

(. distinct ненужно)

На практике это выглядит немного хуже:

SELECT eventattribute1, 
     (SELECT Numtodsinterval(Sum(To_char(To_date(duration, 'HH24:MI:SS'), 
         'HH24') * 
           3600 + 
                To_char( 
           To_date(duration, 'HH24:MI:SS'), 
                'MI') 
                * 60 + 
           To_char(To_date(duration, 
             'HH24:MI:SS'), 'SS')), 'second') AS SUMTOTAL 
     FROM table1 partition(m201302) 
     ) as SUMTOTAL 
FROM table1 partition(m201302) 
WHERE eventattribute22 = 'EURO' 
     AND eventattribute13 = 'MC_PO_ROAM' 
     AND eventattribute14 != 'T' 
     AND event_cost != '0' 
GROUP BY eventattribute1 

Альтернативой является использование аналитической функции, потому что вы не требуется вложенный выбор для этого запроса.

В ответ на ваш комментарий, один метод является коррелированных подзапросов:

SELECT eventattribute1, 
     (SELECT Numtodsinterval(Sum(To_char(To_date(duration, 'HH24:MI:SS'), 
         'HH24') * 
           3600 + 
                To_char( 
           To_date(duration, 'HH24:MI:SS'), 
                'MI') 
                * 60 + 
           To_char(To_date(duration, 
             'HH24:MI:SS'), 'SS')), 'second') AS SUMTOTAL 
     FROM table1 partition(m201302) t1 
     where t1.eventattribute1 = table1.eventattribute1 
     ) as SUMTOTAL 
FROM table1 partition(m201302) 
WHERE eventattribute22 = 'EURO' 
     AND eventattribute13 = 'MC_PO_ROAM' 
     AND eventattribute14 != 'T' 
     AND event_cost != '0' 
GROUP BY eventattribute1; 

Чем проще способ может быть, чтобы переместить его непосредственно в агрегации. , но вам может понадобиться играть с условиями в предложении where;

SELECT eventattribute1, 
     Numtodsinterval(Sum(To_char(To_date(duration, 'HH24:MI:SS'), 
         'HH24') * 
           3600 + 
                To_char( 
           To_date(duration, 'HH24:MI:SS'), 
                'MI') 
                * 60 + 
           To_char(To_date(duration, 
             'HH24:MI:SS'), 'SS')), 'second') AS SUMTOTAL 
FROM table1 partition(m201302) 
WHERE eventattribute22 = 'EURO' 
     AND eventattribute13 = 'MC_PO_ROAM' 
     AND eventattribute14 != 'T' 
     AND event_cost != '0' 
GROUP BY eventattribute1 
+0

Большое спасибо вложенному элементу работает :) Однако есть еще одна проблема. Это дает мне тот же самый SUMTOTAL во всех Eventattribute1. SUMTOTAL должен отличаться. Можете ли вы помочь мне в этом вопросе? – Kristiana

+0

Это работает. Огромное спасибо :) – Kristiana