我在Oracle表中有这样的数据
REGID SESSION_START_DATETIME USAGEID
1 7/11/2016 1
1 6/10/2016 1
1 6/09/2016 1
1 5/04/2016 1
1 5/04/2016 1
1 5/04/2016 1
我需要像
这样的输出REGID 0-30_days_usagecount 31-60_days_usagecount 61-90_days_usagecount
1 1 2 3
usagecount基本上是count(usage_id)...如何为这个问题编写查询?
请帮忙
答案 0 :(得分:1)
以下是使用PIVOT运算符执行此操作的方法。
with
inputs (REGID, SESSION_START_DATETIME, USAGEID) as (
select 1 , to_date('7/11/2016', 'mm/dd/yyyy'), 1 from dual union all
select 1 , to_date('6/10/2016', 'mm/dd/yyyy'), 1 from dual union all
select 1 , to_date('6/09/2016', 'mm/dd/yyyy'), 1 from dual union all
select 1 , to_date('5/04/2016', 'mm/dd/yyyy'), 1 from dual union all
select 1 , to_date('5/04/2016', 'mm/dd/yyyy'), 1 from dual union all
select 1 , to_date('5/04/2016', 'mm/dd/yyyy'), 1 from dual
)
select * from (
select regid, session_start_datetime,
case when trunc(sysdate) - session_start_datetime between 0 and 30
then '0-30_days_usagecount'
when trunc(sysdate) - session_start_datetime between 31 and 60
then '31-60_days_usagecount'
when trunc(sysdate) - session_start_datetime between 61 and 90
then '61-90_days_usagecount'
end
as col
from inputs
)
pivot ( count(session_start_datetime)
for col in ( '0-30_days_usagecount', '31-60_days_usagecount',
'61-90_days_usagecount'
)
)
;
REGID '0-30_days_usagecount' '31-60_days_usagecount' '61-90_days_usagecount'
---------- ---------------------- ----------------------- -----------------------
1 1 2 3
1 row selected.
答案 1 :(得分:0)
SELECT regid,
SUM(
CASE
WHEN session_start_dt <= (sysdate - 30)
THEN usage_id
ELSE 0
END) T1,
SUM(
CASE
WHEN session_start_dt > (sysdate - 30)
AND session_start_date <= (sysdate -60)
THEN usage_id
ELSE 0
END) T2,
SUM(
CASE
WHEN session_start_dt > (sysdate - 60)
AND session_start_date <= (sysdate -90)
THEN usage_id
ELSE 0
END) T3
FROM temp
GROUP BY regid;
答案 2 :(得分:-1)
试试这个
SELECT *