Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как пронумеровать группы в SELECT? / 4 сообщений из 4, страница 1 из 1
14.12.2006, 11:34
    #34199172
Tone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как пронумеровать группы в SELECT?
Доброго времени суток!
Ситуация следущая: в таблице есть повторяющиеся значения. Необходимо пронумеровать каждую группу. Результат должен быть таков:
Иванов 1
Иванов 2
Иванов 3
Смирнов 1
Смирнов 2
Петров 1
Петров 2
Петров 3
Петров 4
...
Рейтинг: 0 / 0
14.12.2006, 15:03
    #34200267
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как пронумеровать группы в SELECT?
ну раз молчат

или туплю
или так

для лисы
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
close databases all

create cursor tt (id i, idGroup i, fam c( 10 ))

insert into tt values ( 5 , 3 ,'Петров')
insert into tt values ( 6 , 3 ,'Петров')
insert into tt values ( 7 , 3 ,'Петров')
insert into tt values ( 8 , 3 ,'Петров')
insert into tt values ( 1 , 4 ,'Иванов') 
insert into tt values ( 2 , 4 ,'Иванов')
insert into tt values ( 3 , 2 ,'Смирнов')
insert into tt values ( 4 , 2 ,'Смирнов')

select tt.id,tt.fam,idGroup,  0  as Count ;
from tt  ;
order by tt.idGroup ;
into cursor pp readwrite

local lnidGroup,lnCounter
lnidGroup =  0 
lnCounter =  0 
update pp set Count=idtt(pp.idGroup,@lnidGroup,@lnCounter)

select pp
brow

return 


function idtt(tnId,tnOldId,tnCounter)
	*set step on 
	tnCounter = iif(tnId<>tnOldId, 1 ,tnCounter+ 1 )
	tnOldId   = iif(tnId<>tnOldId,tnId,tnOldId)
	return tnCounter
endif



sql
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
if object_id('tempdb..#tt') is not null drop table #tt
if object_id('tempdb..#my') is not null drop table #my

create table #tt (id int, idGroup int, fam varchar( 10 ))

insert into #tt values ( 5 , 3 ,'Петров')
insert into #tt values ( 6 , 3 ,'Петров')
insert into #tt values ( 7 , 3 ,'Петров')
insert into #tt values ( 8 , 3 ,'Петров')
insert into #tt values ( 1 , 4 ,'Иванов') 
insert into #tt values ( 2 , 4 ,'Иванов')
insert into #tt values ( 3 , 2 ,'Смирнов')
insert into #tt values ( 4 , 2 ,'Смирнов')

select *, counter= 0 
   into #my
   from #tt
   order by idGroup 

declare @nCounter int, @nOldGroup int
select @nCounter= 0 , @nOldGroup= 0 

update #my set  @nCounter=case when idGroup<>@nOldGroup then  1  else @nCounter+ 1  end, 
		@nOldGroup=idGroup, 
		counter=@nCounter

select * from #my
...
Рейтинг: 0 / 0
14.12.2006, 15:14
    #34200318
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как пронумеровать группы в SELECT?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
CREATE cursor test ( f2 c( 10 ))

INSERT INTO test VALUES ('Ivanoff')
INSERT INTO test VALUES ('Ivanoff')

INSERT INTO test VALUES ('Petroff')
INSERT INTO test VALUES ('Petroff')
INSERT INTO test VALUES ('Petroff')

INSERT INTO test VALUES ('Sidoroff')

PRIVATE i, k, OldF2
m.i =  0 
m.k =  0 
m.OldF2 = ''

SELECT nn(f2) as CountF2, * FROM (select * FROM test ORDER BY f2) zz

FUNCTION nn(m.f2)
IF m.k =  0  
	m.k =  1 
	RETURN  0 
ELSE
	IF m.f2 = m.OldF2
		m.i = m.i +  1 
	ELSE 
		m.i =  1 
		m.OldF2 = m.f2
	ENDIF 
	 RETURN m.i
ENDIF  
ENDFUNC 
...
Рейтинг: 0 / 0
15.12.2006, 08:19
    #34201716
Tone
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как пронумеровать группы в SELECT?
Спосибо за помощь..
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как пронумеровать группы в SELECT? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]