2012-05-03 6 views
0

У меня есть набор данных, как этотФорматирование вывода оракула PLSQL запрос

id  subid  date(in yyyymmdd) time(in hh24miss) count1 count2 
80013727 20000000431 20120429   001500    0  0 
80013727 20000000431 20120429   003000    0  0 
80013729 20000000432 20120429   001500    0  0 
80013729 20000000432 20120429   003000    0  0 
80013728 20000000435 20120429   001500    0  0 
80013728 20000000435 20120429   003000    0  0 

Как вы можете видеть время в 15 минутах приращения. Я хочу показать вывод результата, как показано ниже.

id  Date  subid  00:00:00-00:14:59 00:15:00-00:29:59  
80013727 20120429 20000000431 0     0 
80013729 20120429 20000000432 0     0 

, как вы можете увидеть все данные, связанные с идентификатором 80013727 I S, показанные в одной строке вместо 2 на дату 20120429.

пожалуйста, скажите мне, как достичь этого.

строка заголовка может быть напечатана один раз, используя dbms_output.put_line.

Привет вот ваша answers-

оракул вер 10,2 г

для уникального идентификатора, Subid, дата комбинации count1 и count2 это нужно показать в одном ряду. вместо 4 строк, которые можно увидеть сверху.

80013727 20000000431 20120429 имеет 2 строки для разного времени (т.е. 015000,030000)

Мне нужно, чтобы показать

80013727 20000000431 20120429 count1 (с 1-го ряда), count1 (от 2-го ряда)

80013727 20000000431 20120429 count2 (from 1st row), count2 (from 2 row)

+1

Было бы полезно, если бы вы могли ответить на несколько вопросов: 1) какую версию Oracle вы используете? 2) В выходных строках вашего желаемого набора результатов, какое вычисление используется для получения значений, показанных в последних двух столбцах? Пожалуйста, отредактируйте свой вопрос, нажав кнопку ** edit ** под тегами [oracle] и [plsql], чтобы ответить на эти вопросы. Благодарю. –

+0

Привет, вот ваши ответы. oracle ver 10.2 g для уникального идентификатора, субады, комбинации комбинаций даты и count2 необходимо указать в одной строке. вместо 4 строк, которые можно увидеть сверху. 80013727 20000000431 20120429 имеет 2 строки для разного времени (т.е. 015000,030000) мне нужно показать 80013727 20000000431 20120429 count1 (с 1-го ряда), count1 (от 2-го ряда) – redsoxlost

+0

Было бы сделать жизнь проще для нас, если вы написали лучший вопрос. В частности, пожалуйста, укажите примеры данных, которые * объясняют *, как вы хотите, чтобы код работал. Ничто, кроме нулей, бессмысленно. Кроме того, вы должны соответствовать желаемому результату в соответствии с вашими правилами.Если у вас есть время, чтобы правильно сформулировать вопрос, вы, скорее всего, получите ответ. Помогите нам помочь вам. – APC

ответ

0

Очевидно, что вы упростили свои данные и свою структуру вывода. Я предполагаю, что у вас будет 96 столбцов с графами (хотя я и не собираюсь так далеко).

with cte as 
    (select * from your_table) 
select id 
     , subid 
     , date 
      , type 
      , sum(c01) as "00:00:00-00:14:59" 
      , sum(c02) as "00:15:00-00:29:59" 
      , sum(c96) as "23:45:00-23:59:59" 
from (
    select id 
      , subid 
      , date 
      , 'C1' type 
      , case when time between 0 and 899 then count1 else 0 end as c01 
      , case when time between 900 and 1799 then count1 else 0 end as c02 
      , case when time between 85500 and 86399 then count1 else 0 end as c96 
from cte 
    union all 
    select id 
      , subid 
      , date 
      , 'C2' type 
      , case when time between 0 and 899 then count2 else 0 end as c01 
      , case when time between 900 and 1799 then count2 else 0 end as c02 
      , case when time between 85500 and 86399 then count2 else 0 end as c96 
    ) 
group by id, subid, date, type 
order by id, subid, date, type 

Таким образом, использование выражения факторинга подзапроса для выбора только один раз из таблицы. Он использует case() для присвоения счетчикам определенного столбца времени на основе диапазона секунд. Существует два запроса для агрегирования счетчиков для строк 1 и 2.

Звонки sum() могут быть излишними; из ваших данных неясно, есть ли у вас более одной записи в каждом временном интервале.

Смежные вопросы