可否将下表中的数据:
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的。请高手指点!谢谢!
解决方案 »
- 关于ORACLE自动断开连接的问题
- sysdate这个函数
- 求oracle 下的一句SQL语句,急用。
- 語句優化!
- 我用exp备份写了个批处理文件的出来的名字对清高手看看!
- 数据表中存放对员工的打分情况,想统计各员工的平均分值。请问该SQL语句如何写?
- 请问nuique 与 primary key 有何异同?以下是我的结论,还有其它吗?
- 如何在存储过程(pl/sql)中使用oracle命令?
- linux8+oracle9.2.0安装好了后,工具界面里面不能输入字符,谢谢指教;急!
- cognos连接oracle出错
- 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,那速度和原来就是一样的慢了,所以不知道还能不能再聚类得到正确的结果呢?