SQL группа два значения в одной строке - PullRequest
2 голосов
/ 17 октября 2019

У меня есть этот запрос

    SELECT   to_char(timestamp_arr,'Dy DD/MM/YYYY') as timestamp_date 
        ,to_char(timestamp_arr,'DD/MM/YYYY') as link_date 
        ,count(transport_uid) as value 
        ,decode (statut,'DETECTED','DETECTED','NO DETECTED')  as label
FROM   V_STAT_TRACKING v 
WHERE timestamp_arr= '13/09/2019'
group by statut, timestamp_arr order by timestamp_arr, statut

И я получил этот результат

timestamp_date  link_date   value  statut
Ven. 13/09/2019 13/09/2019  1      DETECTED
Ven. 13/09/2019 13/09/2019  21     NO DETECTED

Вместо этого я хочу изменить свой запрос, чтобы получить этот результат:

timestamp_date  link_date   DETECTED NO DETECTED
Ven. 13/09/2019 13/09/2019  1         21       

Они рассказывают мне о pivot-функции sql, но я не знаю, как она работает.

Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Одним из вариантов будет использование pivot ключевого слова:

select * 
  from
  ( select to_char(timestamp_arr,'Dy DD/MM/YYYY','nls_date_language=French') 
                                               as "Timestamp Date",
           to_char(timestamp_arr,'DD/MM/YYYY') as "Link Date",
           transport_uid, 
           decode (statut,'DETECTED','DETECTED','NO DETECTED') as statut 
      from v_stat_tracking )
  pivot
  (
   count(transport_uid) for statut
                        in ( 'DETECTED' as "Detected", 'NO DETECTED' as "No Detected" )
  );

Демо

2 голосов
/ 17 октября 2019

Вы можете использовать условное агрегирование, как прокомментировал jarlh

select 
    timestamp_date, 
    link_date,
    sum(case when statut = 'DETECTED' then value else 0 end) detected,
    sum(case when statut = 'NOT DETECTED' then value else 0 end) not_detected
from v_stat_tracking 
group by 
    timestamp_date, 
    link_date
...