一条分两条
来源:互联网 发布:imovie是什么软件 编辑:程序博客网 时间:2024/06/11 12:13
--一条拆成两条
--统计当前客户经理和客户关系,上年底客户经理和客户关系
--如果客户经理和客户关系跨越这两个时间段,那么一条分成两条
WITH
basic_t AS (
--客户和客户经理关系表
SELECT 123 CUST_NO,'A' AM_NO, '20091231' start_dt , '29991231' end_dt FROM DUAL
UNION ALL
SELECT 456,'B', '20100401' start_dt , '29991231' end_dt FROM DUAL
UNION ALL
SELECT 789,'C', '20100505' start_dt , '20110101' end_dt FROM DUAL
)
, rela_peroid AS (
--在统计日期和上年底的关系
SELECT t.cust_no
, t.am_no
, CASE WHEN t.start_dt <= '20110425'
AND t.end_dt > '20110425'
AND t.start_dt <= SUBSTR('20110425',1,4)-1 || '1231'
AND t.end_dt > SUBSTR('20110425',1,4) -1 || '1231'
THEN 'ALL'
WHEN t.start_dt <= '20110425'
AND t.end_dt > '20110425'
THEN '20110425'
WHEN t.start_dt <= SUBSTR('20110425',1,4)-1 || '1231'
AND t.end_dt > SUBSTR('20110425',1,4)-1 || '1231'
THEN SUBSTR('20110425',1,4)-1 ||'1231'
END stat_dt
FROM basic_t t
WHERE(
t.start_dt <= '20110425' --当前
AND t.end_dt > '20110425'
)
OR (
t.start_dt <= SUBSTR('20110425',1,4)-1 || '1231' --上年底
AND t.end_dt > SUBSTR('20110425',1,4)-1 || '1231'
)
)
--SELECT * FROM rela_peroid;
, one2two AS (
SELECT 'ALL' stat_dt,decode(rownum,1,'20110425',substr('20110425',1,4) -1 || '1231') rp_dt
from dual connect by rownum < 3;
)
SELECT t.cust_no
, t.am_no
, DECODE(one2two.rp_dt,NULL,t.stat_dt,one2two.rp_dt) AS stat_dt
FROM rela_peroid t
left JOIN one2two
ON t.stat_dt = one2two.stat_dt
ORDER BY cust_no
- 一条分两条
- 上一条,下一条
- 一条短信
- 一条短信
- 一条短信
- 一条毛毯
- 一条sql
- 一条皮带
- 下一条
- 一条SQL
- 一条线
- 一条不归路
- mysql 上一条 下一条
- mysql 上一条 下一条
- 一条大蟒蛇和一条小毒蛇
- 上一条和下一条记录
- 上一条记录下一条记录
- 上一条 下一条 实例代码!
- 第十六章:模版与泛型程序设计
- C++学习网站
- poj1799
- 【C语言】——EVC++下srand函数用法(用于随机分配一个数)
- sphinx代码结构
- 一条分两条
- How lighter is good enough for a color?
- http_build_query生成字符串的参数连接符&
- MFC 油槽 一对多通信的实现
- java中保留任意位数的小数/java中四舍五入/获得任意位数的方法
- 新浪微博OAUTH方法-iPhone
- 听讲座的一点点感悟
- DLNA架构在机顶盒上播放云存储文件的实现
- oracle冷被脚本