如何编写一个SQL查询,从表中选择一个列,但返回两列,其中另一个包含行的索引(一个新的,从1到n开始)。它必须没有使用那样做的函数(如row_number()) 有任何想法吗?
编辑:它必须是一个选择的查询
答案 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 , 公司名 来自公司