2009-02-04 192 views
1

如何編寫一個SQL查詢來從表中選擇一列,但返回兩列,其中另一列包含該行的索引(一個新行,從1開始到n)。它必須沒有使用這樣的函數(比如row_number())。
任何想法?SQL查詢計算返回結果

編輯:它必須是一個一個選擇查詢

+0

既然你不準使用row_number我認爲這是作業? – some 2009-02-04 10:18:19

+0

這是朋友在尋找工作時遇到的一些問題 – agnieszka 2009-02-04 10:19:59

+0

取決於數據庫引擎。如果他們支持變量,它可能是這樣的:http://msdn.microsoft.com/en-us/library/ms187953.aspx – some 2009-02-04 10:26:12

回答

4

您可以在任何數據庫上執行此操作做出這種讓我感到有點慚愧的詭計。在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或標識符,這種技術也能工作。

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 
0

,如果你使用的是Oracle或支持序列對象的數據庫,使一個新的數據庫序列對象用於這一目的。接下來創建一個視圖,並運行它。

插入到視圖中選擇列名,sequence.next從表

0

在MySQL中,您可以:

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 
0

我想通:

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

在SQL Server 2005和更高版本,可以使用OVER做到這一點:在(由COMPANY_ID順序)

SELECT秩()作爲ROWNUM ,COMPANY_NAME FROM公司