table有大致如下的记录,这些记录已经是按照规定要求排序好的了field1 field2
A B
B F
C D
E F
F A
...我要实现的效果field
A
B
F
C
D
E
...做法就是先取第一条记录中的field1字段值,然后再取field2字段值,在取到field1、field2字段值的时候,得先判断我当前取得的列表中是否已经存在了这些字段值,如果存在则跳过,处理完继续下一条,直到结束。
另外,同一条记录中field1和field2值是不同的。不要写delphi程序,也不要写存储过程什么的,我想要一条SQL语句OPEN直接返回我要的结果,请问该怎么做,最好效率要高的,因为数据量比较大,谢谢各位!
A B
B F
C D
E F
F A
...我要实现的效果field
A
B
F
C
D
E
...做法就是先取第一条记录中的field1字段值,然后再取field2字段值,在取到field1、field2字段值的时候,得先判断我当前取得的列表中是否已经存在了这些字段值,如果存在则跳过,处理完继续下一条,直到结束。
另外,同一条记录中field1和field2值是不同的。不要写delphi程序,也不要写存储过程什么的,我想要一条SQL语句OPEN直接返回我要的结果,请问该怎么做,最好效率要高的,因为数据量比较大,谢谢各位!
另外CSDN老让我重新登录 不知道怎么回事 发一个帖子让我登录了N次 纳闷...
union
select field2 from 表 where field2 not in (select field1 from 表)) order by f
前台不允许用delphi实现,后台不能使用临时表/函数/视图/存储过程等
可以说,这个表的设计是失败的,程序也是失败的...
declare @tb table
(
field1 char(1),
field2 char(1)
)insert into @tb
select 'A','B' union all
select 'B','F' union all
select 'C','D' union all
select 'E','F' union all
select 'F' ,'A'Select [RowID] = IDENTITY (int, 1, 1), * INTO # FROM @tb
Select * FROM #SELECT min(NN.RowID) as RowID,NN.MM FROM (select * from (select field1 AS MM,RowID from # union select field2 AS MM,RowID from #) T ) NN GROUP BY NN.MM order by RowIDDrop TABLE #
RowID MM
1 A
1 B
2 F
3 C
3 D
4 E
结果集result依次为A、B定位第二条记录:B、F
结果集result依次为A、B、F(第二条记录中的B前面已经取到,所以后面都不需要取B)定位第三条记录:C、D
结果集result依次为A、B、F、C、D(C、D在前面并没取到 所以这里要取)定位第四条记录:E、F
结果集result依次为A、B、F、C、D、E(E前面并没有取到 但F前面已经取到了)定位第五条记录:F、A
结果集result依次为A、B、F、C、D、E(F、A在前面已经取到 所以这里不需要再取)...
应该很清楚了吧 我想要的就是需要一条SQL语句把我这个result给返回来,结果就是这样的顺序,不要存储过程,因为数据库那边不是我维护的 谢谢!delphi实现其实也可以 不过安照描述的处理起来 效率会比较低!
declare @tb table
(
field1 char(1),
field2 char(1)
)insert into @tb
select 'A','B' union all
select 'B','F' union all
select 'C','D' union all
select 'E','F' union all
select 'F' ,'A'
select field1 as res from @tb
union
select field2 as res from @tb/*
res
----
A
B
C
D
E
F(所影响的行数为 6 行)*/
我上面给出的是已经经过处理的数据了 用SQL语句处理也是可以的 但是效率实在比较低
目前把字段内容全部放进内存里面用DELPHI处理 效率高很多 谢谢各位!