一个SQL语句查询问题,高手请现身

来源:百度知道 编辑:UC知道 时间:2024/05/02 16:44:30
已知某表T(A,B)A是integer和Primary Key, B任意类型。
如何给出G(A,B),G表输出T表第一行到第N行,而T表第N行正是A的最大值。
多谢各位朋友热心帮助。 我把题目重述下,现在T表改为三项,T(A,B,C) A还是integer和primary key。A大小顺序打乱。B,C任意类型。 给出G表(A,B,C),G表的结构和T表相同,但G表只包含了T表从第一行到A最大值的那一行。也就是说G拷贝了T表中A最大值那一行和它以上的所有记录,而T表最大值以下的所有行不拷贝进G表。

因SQL表没有记录号属性,所以所谓第一行到第N行,在没有给出排序条件的情况下,是不能确定的记录集.

所以,您需要给出排序条件或对表按一定的字段进行了索引,才能确定哪一条记录是第几行.

比如,您是要按A排序,那不就是全部记录吗?就不需要查询条件了.

如果是按B排序或索引,即么可以这样求您的记录集

SELECT * FROM T AS G WHERE B<=
(SELECT TOP 1 B FROM T WHERE A=(SELECT MAX(A) FROM T) )
ORDER BY B

就是先求出A的最大值对应的B值,
再从按B排序记录集中去掉取上面求出的B值大的(排在后面的)记录.
是这意思吗?
=====================================
但是您没有认真看答案,SQL SERVER 表不象VFP表有固定顺序,所以没有排序规则无法确定是某一行是第几行,必须要给出排序字段才行.
如果排序字段是B,则这样可以生成新表:
SELECT * into g FROM T WHERE B<=
(SELECT TOP 1 B FROM T WHERE A=(SELECT MAX(A) FROM T) )

如果是VFP,
则这样
SELECT * into g FROM T WHERE RECNO()<=
(SELECT RECNO() FROM T WHERE A=(SELECT MAX(A) FROM T) )

insert into G
select A,B from T
order by A;
select * from G
order by A

你这个需求除了写函数以外绝大多数数据库不能满足,因为绝大多数数据库没有RowID这个属性

输出 :

SELECT A, B FROM G

UNION ALL

SELECT A,