用于计算返回结果的SQL查询

时间:2009-02-04 10:14:09

标签: sql

如何编写一个SQL查询,从表中选择一个列,但返回两列,其中另一个包含行的索引(一个新的,从1到n开始)。它必须没有使用那样做的函数(如row_number()) 有任何想法吗?

编辑:它必须是一个选择的查询

6 个答案:

答案 0 :(得分:4)

您可以在任何数据库上执行此操作:

SELECT  (SELECT COUNT (1) FROM field_company fc2
         WHERE fc2.field_company_id <= fc.field_company_id) AS row_num,
        fc.field_company_name
FROM    field_company fc

答案 1 :(得分:0)

SET NOCOUNT ON

DECLARE @item_table TABLE
(
 row_num INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, --THE IDENTITY STATEMENT IS IMPORTANT!
 field_company_name VARCHAR(255)
)

INSERT INTO @item_table 
    SELECT field_company_name FROM field_company

SELECT  * FROM @item_table

答案 2 :(得分:0)

如果您使用的是Oracle或支持Sequence对象的数据库,请为此创建一个新的db序列对象。接下来创建一个视图,然后运行它。

作为select column_name插入视图,从表

插入sequence.next

答案 3 :(得分:0)

在mysql中你可以:

SELECT Row,Column1
FROM (SELECT @row := @row + 1 AS Row, Column1 FROM table1 ) 
As derived1

答案 4 :(得分:0)

我想出了一种做到这一点的hackish方式,我有点惭愧。关于Postgres 8.1:

SELECT generate_series,(SELECT username FROM users LIMIT 1 OFFSET generate_series)FROM generate_series(0,(SELECT count(*) - 1 FROM users));

我相信即使你的源表没有唯一的ID或标识符,这种技术也会起作用。

答案 5 :(得分:0)

在SQL Server 2005及更高版本上,您可以使用OVER来完成此任务:

将rank rank()over(由company_id排序)作为rownum , 公司名 来自公司