2016-06-19 5 views
0

У меня проблема с подсчетом строк. Это моя процедура:Подсчет строк 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 

Результаты:

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 

Я хочу подсчитывать строки с одинаковым идентификатором, Somthing как:

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 

Любые советы? (Извините за английский)

+0

Вашего начальное чтение является неупорядоченным, так что нет никакой гарантии, что вы получите те же строки каждый раз, или 'loc.STPointN (...)' собирается получить одинаковое значение 'z' каждого время. Непонятно, почему вы читаете строку по времени, а не одеяло 'SELECT' (возможно, с' CROSS APPLY'). Вам также необходимо выяснить критерии для присвоения счета, или числа могут меняться каждый раз. –

ответ

2

Вы должны применить RowNumber функции окна, как показано ниже

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

В приведенном выше коде countt на идентификатор вы получаете не является детерминированным, если вы хотите конкретный столбец ID иметь такое же countt , вам нужно заказать по уникальной ценности, как

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

Примечание: какая строка получает счетчик (на 'id') является недетерминированным, что может быть важным соображением. Как минимум, упорядочение по разделу ничего не делает, поскольку это будет постоянное значение. –

+0

Да, верно, забыл упомянуть, что – TheGameiswar

Смежные вопросы