2016-08-22 104 views
-1

如何編寫一個查詢,以便在屏幕截圖中顯示它。Row_number函數sql

我用ROW_NUMBER函數創建ID

Select ROW_NUMBER() over (Partition by R.BrandName, R.City order by R.City, R.BrandName) as ID, 

query result

+0

你應該選擇比'ID'一個更好的名字(這意味着'IDENTITY'),因爲'ROW_NUMBER()'是不是一個'IDENTITY'列的替代品:它是在運行時生成的,並且在單個結果表範圍之外的任何方式都不是唯一的。 – Dai

回答

0

我認爲你需要通過MACHING行)到gruop並不得不放棄在增量順序相同數量的..如果因此使用DENSE_RANK(而不是ROW_NUMBER()。

嘗試用下面的腳本..

--creating a sample table 
CREATE TABLE dbo.GroupSet 
(ProdDateTime DATETIME, 
BrandName VARCHAR(50), 
[Description] VARCHAR(50), 
City VARCHAR(10)) 

--populatinng data 
INSERT INTO GroupSet 
VALUES ('2016-06-15 16:10:03.000','13856.11','POL','Ak') 
     ,('2016-06-15 14:56:05.000','13856.11','POL','Ak') 
     ,('2016-06-15 15:58:22.000','13856.11','POL','Ak') 
     ,('2016-05-04 01:02:50.000','30205.18','MUR','Ak') 
     ,('2016-05-03 02:15:10.000','30205.18','MUR','Ak') 
     ,('2016-05-03 04:23:10.000','30205.18','MUR','Ak') 
     ,('2016-05-03 03:32:10.000','30205.18','MUR','Ak') 
     ,('2016-06-03 15:31:20.000','30205.18','MUR','Ak') 

--Here is the script and the result you wanted to be in the column ID_DenseRank 
SELECT 
    ROW_NUMBER() over (PARTITION BY R.BrandName, R.City order by R.City, R.BrandName) as ID_RNO, -- ROW_NUMBER() result 
    DENSE_RANK() over (order by R.BrandName, R.City) as ID_DenseRank, -- DENSE_RANK() result 
    R.ProdDateTime, 
    R.BrandName, 
    R.[Description], 
    R.City 
FROM GroupSet R 
+0

相同的結果我試過了,它給'1'作爲所有行的ID – Salta

+0

嘗試使用更新後的代碼。我試着用你的數據。我的查詢中的「ID_denseRank」列會給你你需要的順序。我還包含了row_number,用於顯示結果集中的差異。 –

+0

非常感謝你! – Salta

0

試試這個:

Select 
    ROW_NUMBER() over (Partition by R.BrandName,R.Description,R.City order by R.ProdDateTime DESC) as ID, 
    R.BrandName, 
    R.Description, 
    R.City 
FROM Table R 
0

什麼是FACode?似乎你想按品牌名稱進行分區。試試這個:

ROW_NUMBER() over (Partition by BrandName order by R.City) as ID 
+0

'FACode'是'品牌名稱',我忘了更改 – Salta

+0

繼續嘗試。這應該適合你。 –

+0

它顯示與以前的查詢 – Salta