这样的SQL语句怎样写?(高分求解,打下来帮忙) (200分)

  • 主题发起人 主题发起人 dcba
  • 开始时间 开始时间
D

dcba

Unregistered / Unconfirmed
GUEST, unregistred user!
假设有表A,结构如下:
sn a2
1 3
2 3
3 4
4 1
5 6
6 8
7 6
8 3
9 2
我想用sql语句select使选出的结果为:
sn1 sn2
1 3
2 5
4 6
8 7
0 9
即,将所有a2字段为奇数的sn作为一列,为偶数的作为一列,如果两列个数不等,用0补齐
我使用的是access xp + ado
 
你是什么数据库啊?
不同的数据库有不同的方法。
 
不明白啥意思????[:(]
 
我使用access数据库
 
sorry,i have no way.
if oracle,i think it will be a way to sovle it.
 
可能没有这样的SQL语句,只能采取变通的手法:
Table1.first;
Table2.first; //table2中有两列Sn1,Sn2
While not Table1.eof do
begin
if Table1['a2'].asinteger div 2 =0 then //a2为偶数
把这条记录赋给tabel2['sn2']
else
把这条记录赋给tabel2['sn1'];
Table1.next;
end;

这样可以实现你的想法。
 
不太清楚你的意思,请说清楚,如果奇数列没有,是不是都要用零补齐,等等
其实这个可能不是个难题,
 
我的意思就是两列如果个数不一样,为了能有完整的记录(一行是一条记录),少的那一列就用
0补齐
 
select a.a2 as sn1,b.a2 as sn2
from (select distinct a2 from tablename where a2%2=0) a,
(select distinct a2 from tablename where a2%2<>0)b
where a.sn<>b.sn
 
我试了一下,暂时还不能完全达到你的要求,但如果借助一个临时表,即可容易实现。

数据库为ORacle;
select a2 sn1,0 sn2 from test where mod(a2,2)<>0
union all
select 0 sn1,a2 sn2 from test where mod(a2,2)=0
order by sn2,sn1
 
借助一个表吧,那样很简单的!
 
---> 将所有a2字段为奇数的sn作为一列,为偶数的作为一列,如果两列个数不等,用0补齐
根据什么将两行合并成一行?
另外表的主键是什么?
 
如果有偶数行可以:
select distinct b.*,c.* from
(select a2 from a where mod(a2)>0) b,
(select a2 from a where mod(a2)=0) c
 
还没测试,不知行否
select b.*,c.* from
(select a2 from a where mod(a2)>0) b,
(select a2 from a where mod(a2)=0) c
group by (b.*,c.*)
 
只能用联接或视图了!!
 
借助三个表,其中的id的值是自动累加1作为关健字
table3 (id,sn1,sn2)、a(id,sn1)、b(id,sn2)
table2 是你给的表(sn,a2)
insert into b select sn as sn1 from table2 where a2%2 <>0
insert into a select sn as sn2 from table2 where a2%2 =0
insert into table3 select a.sn1,b.sn2 from b right outer join a on a.id =b.id
update table3 set sn2 =0 where sn2 is null
select * from table3
 

Similar threads

D
回复
0
查看
835
DelphiTeacher的专栏
D
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
617
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
后退
顶部