今天为客户提供报表时,碰到一个小问题,客户提供给我的是excel表格,表格之中有个列名为订单号码(order_id),
需要我作什么呢,到数据库中查询这些订单号码,并提取与订单相关的数据填充更新到他们发送给我的表格中。
这里有个问题:订单相关的数据是存储在表:deal_order,用sql根据客户的要求查询后,得到的结果order_id订单号码的
顺序与客户发送给我的就不一一匹配了,导致要手工
一一匹配,然后把相符的订单数据填充更新到客户所需的excel表格中;
如何解决令客户提供的订单号码的顺序与经过sql查询后的订单号码的顺序相匹配,或者说相一致呢,这样很简便了。
直接把查询的结果复制到表格中,发给客业即可,节省了
大量的时间.
分析:
客户表格
order_id
1
3
2
查询的sql
order_id
1
2
3
如何把客户的表格转换为一种形式,经sql查询后原顺序不变化,即新加一个列即可,此列与原order_id对应
,最终对这个新添加的列order by即不打乱原订单的顺序了
--创建表
create table deal_order(order_id int);
--插入数据
insert into deal_order values(1);
insert into deal_order values(2);
insert into deal_order values(3);
insert into deal_order values(4);
--提交
commit;
---添加一个新表t_map,用于映射原表格order_id与新添列的关系
create table t_map(order_id int,orig_col int);
---创建一个序列,基于序列可实现order_id无变更顺序的功能
create sequence seq_map start with 1;
--假如原表格提供的订单顺序为:3,2,1,4
insert into t_map(order_id,orig_col) values(3,seq_map.nextval);
insert into t_map(order_id,orig_col) values(2,seq_map.nextval);
insert into t_map(order_id,orig_col) values(1,seq_map.nextval);
insert into t_map(order_id,orig_col) values(4,seq_map.nextval);
--提交
commit;
--运行产生客户报表的sql
select t_map.order_id,t_map.orig_col
from deal_order,
t_map
where deal_order.order_id=t_map.order_id
order by t_map.orig_col;
SQL> --运行产生客户报表的sql
SQL> select t_map.order_id,t_map.orig_col
2 from deal_order,
3 t_map
4 where deal_order.order_id=t_map.order_id
5 order by t_map.orig_col;
ORDER_ID ORIG_COL
--------------------------------------- ---------------------------------------
3 2
2 3
1 4
4 5
小结;
1,勤于思考很重要,绝对可以提高工作效率
2,借助序列作为纽带,实现客户订单号码在运行sql查询后顺序不打乱
3,构建一个中间表,作为序列工作的基础
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-755036/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-755036/