如:表A用户名 动作时间 动作名称 123 2012-07-23 开通服务
123 2012-07-24 停止服务怎么把数据查出来用户名 开通时间 停止时间
123 2012-07-23 2012-07-24
123 2012-07-24 停止服务怎么把数据查出来用户名 开通时间 停止时间
123 2012-07-23 2012-07-24
解决方案 »
- 问一个存储过程的问题,各位高手来看看,我卡住了
- 请大家帮我看看这个oracle10g建库脚本的问题
- 求:如何写出漂亮的SQL语句
- 急救!大家帮忙看下为什么文件导入不了数据库了!在线等。
- 如何写一个批量插入数据的函数,同时要求对某一字段自动编号.
- 输出设置问题
- oralce817中编译存储过程时状态这invalid,但错误显示不能用,请问如何才能看这个错误提示啊,谢谢
- kb835732 与oracle 816 是否冲突
- HP服务器下装ORACLE9I怎么没有反应?——急
- ORA-06502: PL/SQL: numeric or value error: character string buffer too small ORA
- win7下复制数据库文件,遇到access denied错误,怎么解决?
- C#在64位系统中连接32位ODBC的问题
with aa
as
(select 123 user_name, '2012-07-23' action_time, '开通服务' action_name from dual
union
select 123 user_name, '2012-07-24' action_time, '停止服务' action_name from dual
)select user_name 用户名,
wm_concat(decode(action_name,'开通服务',action_time)) 开通时间,
wm_concat(decode(action_name,'停止服务',action_time)) 停止时间
from aa
group by user_name;
如果一个用户 有多次开通 停止动作,这个sql 语句就会把一个用户完全显示在一条记录里面去了如下图:
WITH t AS
( SELECT '123' AS cust, DATE'2012-07-23' AS actDate, '开通服务' AS act FROM dual
UNION ALL
SELECT '123', DATE'2012-07-24', '停止服务' FROM dual
union all
SELECT '122', DATE'2012-07-01', '开通服务' FROM dual
union all
SELECT '122', DATE'2012-07-22', '停止服务' FROM dual
)
SELECT * FROM t
pivot(min(actdate) FOR act IN ('开通服务','停止服务'));CUST '开通服务' '停止服务'
---- ------------------------- -------------------------
122 2012-07-01 00:00:00 2012-07-22 00:00:00
123 2012-07-23 00:00:00 2012-07-24 00:00:00
as
(select 123 user_name, '2012-07-23' action_time, '开通服务' action_name from dual
union
select 123 user_name, '2012-07-24' action_time, '停止服务' action_name from dual
union
select 123 user_name, '2012-07-25' action_time, '开通服务' action_name from dual
union
select 123 user_name, '2012-07-26' action_time, '停止服务' action_name from dual
union
select 133 user_name, '2012-07-25' action_time, '开通服务' action_name from dual
union
select 133 user_name, '2012-07-26' action_time, '停止服务' action_name from dual
union
select 133 user_name, '2012-07-27' action_time, '开通服务' action_name from dual
)
select user_name, action_time 开通服务,end_time 开通服务 from (
select user_name,action_time,LEAD(action_time)over(partition by user_name order by action_time) end_time,
row_number()over(partition by user_name order by action_time)
a from aa)
where mod(a,2)=1
where a.username=b.username
and a.action!=b.action
and a.action='开通服务'