可否将下表中的数据:
airline flight org_city cki_date iflt
CA 1234 PEK 2006-01-01 1
CA 3234 PEK 2006-01-02 1
SZ 1134 CAN 2006-01-01 1
SZ 1113 CAN 2006-01-01 0
SZ 1255 PEK 2006-01-02 1
SZ 1325 PEK 2006-01-03 1
SZ 1025 PEK 2006-01-04 1
SZ 1235 PEK 2006-01-05 1
SC 2204 PEK 2006-01-03 0转换成:(其中number是:将iflt=0的同一个airline记录累加,iflt=1的同一个airline记录累加)
ariline iflt number
CA 0 1
CA 1 1
SZ 0 1
SZ 1 5
SC 0 1
要求:按照airline和iflt聚类,也就是说同一个airline的记录要在一起,同时一个airline对应两条记录,即iflt=0和iflt=1的。请高手指点!谢谢!
airline flight org_city cki_date iflt
CA 1234 PEK 2006-01-01 1
CA 3234 PEK 2006-01-02 1
SZ 1134 CAN 2006-01-01 1
SZ 1113 CAN 2006-01-01 0
SZ 1255 PEK 2006-01-02 1
SZ 1325 PEK 2006-01-03 1
SZ 1025 PEK 2006-01-04 1
SZ 1235 PEK 2006-01-05 1
SC 2204 PEK 2006-01-03 0转换成:(其中number是:将iflt=0的同一个airline记录累加,iflt=1的同一个airline记录累加)
ariline iflt number
CA 0 1
CA 1 1
SZ 0 1
SZ 1 5
SC 0 1
要求:按照airline和iflt聚类,也就是说同一个airline的记录要在一起,同时一个airline对应两条记录,即iflt=0和iflt=1的。请高手指点!谢谢!
解决方案 »
- 使用PL/SQL创建数据表时出现缺失右括号和标识符无效的错误,怎么解决?
- 如何实现这样的连接?
- oracle一个数据库对应多个实例
- Oracle10g在AS4上遇到这样的问题我该怎么办啊?
- 如何分段备份数据库数据
- 如何实现开发过程中的版本控制?
- 100分求救!!!火急求救!用vb向oracle中插入blob型数据时出现的问题!!!火急求救!
- oracle 数据库的灾难恢复
- 如何在JOB里面把某些数据导入到一个dbf表?前途dbf表已经存在
- 为什么我的插入不成功呢?(实在不好意思,我的可用分被用完了)
- GREATWARE和MADO哪个好一些?
- 点击editdata按钮,为什么会跳出错误“these query result are not updateable....”
group by substr(airline,1,2),iflt
order by substr(airline,1,2),iflt;
但用您的sql出来的数据不太准确,因为没有按照cki_date和org_city聚类,有可能同一天cki_date,同一个flight会有两条或多条记录,需要取出一条,但如果group by中添加这两个字段,最后的结果又不是按照每个airline有两条记录的方式显示了,请问可以解决么?
airline flight org_city cki_date iflt
CA 1234 PEK 2006-01-01 1
CA 3234 PEK 2006-01-02 1
SZ 1134 CAN 2006-01-01 1
SZ 1113 CAN 2006-01-01 0
SZ 1255 PEK 2006-01-02 1
SZ 1325 PEK 2006-01-03 1
SZ 1025 PEK 2006-01-04 1
SZ 1235 PEK 2006-01-05 1
SC 2204 PEK 2006-01-03 0
SELECT airline, iflt, flight, cki_date, org_city
FROM tbl_cstd
WHERE cki_date>=to_date('20060101', 'YYYYMMDD') and cki_date<=to_date('20060131', 'YYYYMMDD')
GROUP BY airline,iflt, flight, cki_date, org_city
ORDER BY airline;
之前是用这个SQL取出记录在code里做累加,如果出现同一个cki_date,同一个flight有可能有两条或多条记录,例如:
airline flight org_city cki_date iflt des_city
CA 1234 PEK 2006-01-01 0 CAN
CA 1234 PEK 2006-01-01 0 PVG
flight是1234的会从PEK到CAN然后从CAN到PVG,但数据库中记录的是两条,我现在就需要将这两条记录算作一条取出来,所以用到了GROUP BY airline,iflt, flight, cki_date, org_city,但code中做累加FETCH速度太慢了,如果30000条记录,需要7s,所以我想是不是可以通过SQL将记录数量减少,用了如下的SQL:
SELECT airline, iflt, count(*), cki_date
FROM tbl
WHERE cki_date>=to_date('20060101', 'YYYYMMDD') and cki_date<=to_date('20060131', 'YYYYMMDD')
GROUP BY airline, iflt, cki_date
order by airline
现在得到的就是:
airline iflt count(*) cki_date
CA 0 507 2006-01-01
CA 0 536 2006-01-02
...
CA 0 556 2006-01-31
...
CA 1 139 2006-01-01
CA 1 123 2006-01-02
...
CA 1 121 2006-01-31
...
即按照天数将结果聚类,但现在的问题是比如在2006-01-01,有可能存在:
airline flight org_city cki_date iflt des_city
CA 1234 PEK 2006-01-01 0 CAN
CA 1234 PEK 2006-01-01 0 PVG
这种情况,这样的话,SQL就将记录数算作两条而不是一条了,如果加上GROUP BY airline,iflt, flight, cki_date, org_city,那速度和原来就是一样的慢了,所以不知道还能不能再聚类得到正确的结果呢?