2016-08-22 3 views
-1

Wie schreibe ich eine Abfrage so wird es tun, wie es auf dem Screenshot gezeigt wird.Row_number Funktion sql

benutzte ich row_number Funktion ID Spalte

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

query result

+0

Sie sollten einen besseren Namen als 'ID' wählen, weil' ROW_NUMBER (die 'IDENTITY' impliziert)()' ist kein Ersatz für eine 'IDENTITY' Spalte : Es wird zur Laufzeit generiert und ist in keiner Weise außerhalb des Bereichs einer einzelnen Ergebnistabelle. – Dai

Antwort

0

Ich glaube, Sie durch die Bearbeitungs Zeilen gruop müssen und haben eine identische Anzahl in einer inkrementellen Reihenfolge geben .. wenn ja verwenden DENSE_RANK() anstelle von row_number().

mit dem folgende Skript versuchen ..

--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

Ich habe es versucht und es gibt '1' als ID für alle Zeilen – Salta

+0

Versuchen Sie mit dem aktualisierten Code. Ich habe es mit deinen Daten versucht. "ID_denseRank" Spalte meiner Abfrage wird Ihnen die Reihenfolge geben, die Sie benötigten. Ich habe Ihre row_number auch für den Unterschied in der Ergebnismenge enthalten. –

+0

Vielen Dank !!!! – Salta

0

Das Versuchen zu erstellen:

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

Was FACODE ist? Scheint, dass Sie Partition nach BrandName wollen. Versuchen Sie folgendes:

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

'FACode' ist ein 'BrandName', ich habe vergessen, das zu ändern – Salta

+0

Weiter versuchen dann. Dies sollte für Sie gut funktionieren. –

+0

es zeigt das gleiche Ergebnis wie vorherige Abfrage – Salta