2016-06-19 21 views
0

Ich habe ein Problem mit dem Zählen von Zeilen. Das ist mein Verfahren:Zeilen zählen SQL-Server

DECLARE @result table(id int,latitude float, longitude float) 
Declare @z int = 1 
while (@z <5) 
BEGIN 
INSERT INTO 
@result 
SELECT 
id, 
loc.STPointN(@z).Lat as lat, 
loc.STPointN(@z).Long as long 
FROM test6 
SET @z = @z+1 
END 
Select * from @result 
ORDER BY id 

Ergebnisse:

ID lat   long 
1 16,71175 52,689702 
1 17,008381 52,247983 
2 17,228107 52,689702 
2 17,008381 42,247983 
2 16,71175 42,689702 

Ich mag Reihen mit gleicher ID zählen, ungefähr wie:

ID lat   long  count 
1 16,71175 52,689702 1 
1 17,008381 52,247983 2 
2 17,228107 52,689702 1 
2 17,008381 42,247983 2 
2 16,71175 42,689702 3 

Jede Beratung? (Sorry für Englisch)

+0

Ihre erste Lese ist ungeordnet, so gibt es keine Garantie, dass Sie erhalten die gleichen Zeilen jedes Mal, oder dass 'loc.STPointN (...)' wird, um zu bestellen bekomme jeweils den gleichen Wert von 'z' Zeit. Es ist unklar, warum Sie eine Zeile nach der anderen lesen, im Gegensatz zu einer Decke "SELECT" (möglicherweise mit "CROSS APPLY"). Sie müssen auch ein Kriterium für die Zuweisung der Anzahl herausfinden, oder die Zahlen können sich jedes Mal ändern. –

Antwort

2

Sie benötigen RowNumber Fensterfunktion wie anwenden unter

select 
id, 
lat, 
long, 
row_number() over(partition by id order by id) as countt 
from 
yourtable 

In dem obigen Code countt pro-ID Sie erhalten nicht deterministisch ist, wenn Sie bestimmte Spalte id wollen gleiche countt haben , müssen Sie mit dem einzigartigen Wert wie

row_number() over(partition by id order by lat) as countt 
+1

Hinweis: Welche Zeile bekommt welche Anzahl (pro 'id') ist nicht deterministisch, was eine wichtige Überlegung sein könnte. Zumindest tut das Ordnen durch die Partition nichts, da es ein konstanter Wert wäre. –

+0

Ja das ist richtig, vergaß das zu erwähnen – TheGameiswar