一个SQL语句查询问题,高手请现身
来源:百度知道 编辑:UC知道 时间:2024/05/02 16:44:30
如何给出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,