2015-09-30 145 views
0

SQL Server查詢。我記得我發現了一種生成序列號的方法,它在選擇數據時不使用ROW_NUMBER函數。但我不記得現在Sql server生成序列號

它是這樣的:

DECLARE @num int 
SET @num = 0 
SELECT ??? as [Index], Name FROM Product 

The result will be: 
Index | Name 
1  | Rug 
2  | Water 
3  | Oil 

我記得???就像@num = @num + 1一樣,在這裏它使用了一個函數CAST或ISNULL或CONVERT或另一個(我不記得,但我確定它不使用ROW_NUMBER()函數)

有辦法做到這一點?

我的問題,當我使用ROW_NUMBER():

select Id, Case when [type] = 'abc' then 1 else 0 end as Classification, 
     ???? as DisplayOrder 
from Product 
order by Classification, ..., ..., ... 

???如何在這裏使用Row_number()? 我嘗試Row_number(超過order by(select 1)),但它'按分類排序,...'語句在Row_number生成後運行。這意味着序號是在按語句操作排序之前生成的。

+1

爲什麼你不希望使用'ROW_NUMBER()'。這將是自然而然的做法。 –

+1

你記得不正確。 SQL Server「SELECT」可以爲變量賦值。或者,它可以返回列。但是,它並不是在同一時間。 MySQL確實允許你做你想做的事情。 –

+0

是的,我在My SQL中看到它是@@ num:= @@ num + 1 –

回答

0

嘗試

使用Row_Number()

SELECT ROW_NUMBER() OVER(ORDER BY NEWID()) as [Index], Name FROM Product 

編輯2:

使用Identity columnTemporary Table

create table #x([Index] bigint identity(1,1),Name varchar(200)) 

insert into #x(Name) 
SELECT Name FROM Product 

select * from #x 

drop table #x