Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:45 25.05.24 
Клубове/ Компютри и Интернет / Бази данни Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема SQL Server - номериране в групи
Автор Pride of The North ()
Публикувано08.08.05 17:17  



Не знам какъв е шанса някой да го прочете навереме и да има идея...
номерирането е от 1 до Н но в рамките на групиране. Прост пример
ако имаме категории 1,2,3,...
то трябва да номерираме от 1 до Н продуктите в категория 1 после в категория 2 и т.н.
Първото решение използва курсор , чудесно докато продуктите са по-малко от 1 милион, но после стана зле. клиента има само 1 час прозорец да пусне заявката а тя прави и други неща така че сме замомента загазили.

измерих времената за изпълнение и това е най-бавната част. ако някой се сеща дори и за малка оптимизация ще съм благодарен ;)
Долу има примерен код на това което се прави с курсор.

DECLARE @Tmp table(
DIN int,
RSN int,
AuditId int,
ASN int)

set nocount on

insert into @Tmp values (1,1,1,0)
insert into @Tmp values (1,2,2,0)
insert into @Tmp values (1,3,3,0)
insert into @Tmp values (1,4,4,0)
insert into @Tmp values (1,5,5,0)
insert into @Tmp values (2,1,1,0)
insert into @Tmp values (2,2,2,0)
insert into @Tmp values (2,3,3,0)

set nocount off

declare @DIN int, @RSN int, @AuditID int, @PrevDin int, @CalculatedASN int

DECLARE saiCursor CURSOR LOCAL FORWARD_ONLY FOR
SELECT DIN,RSN, AuditId FROM @Tmp
ORDER BY DIN, RSN, AuditId

OPEN saiCursor

FETCH NEXT FROM saiCursor INTO @DIN, @RSN, @AuditID

SET @PrevDIN = 0
SET @CalculatedASN = 0

WHILE @@FETCH_STATUS = 0 BEGIN

IF @PrevDIN <> @DIN
BEGIN
SET @CalculatedASN = 1
SET @PrevDIN = @DIN
END
ELSE
BEGIN
IF @CalculatedASN = 9
BEGIN
SET @CalculatedASN = 1
END
ELSE
BEGIN
SET @CalculatedASN = @CalculatedASN + 1
END
END

UPDATE @Tmp
SET ASN = @CalculatedASN
WHERE DIN = @DIN AND RSN = @RSN AND AuditId = @AuditId

FETCH NEXT FROM saiCursor INTO @DIN, @RSN, @AuditID

END -- WHILE

CLOSE saiCursor

DEALLOCATE saiCursor

select * from @tmp



Цялата тема
ТемаАвторПубликувано
* SQL Server - номериране в групи Pride of The North   08.08.05 17:17
. * Re: SQL Server - номериране в групи Pride of The North   08.08.05 17:44
. * Гепи AzSumZmei   08.08.05 17:45
. * Re: Гепи Pride of The North   08.08.05 17:55
. * Гепи 2 AzSumZmei   08.08.05 18:10
. * Re: Гепи 2 Pride of The North   08.08.05 18:19
. * Re: Гепи 2 AzSumZmei   08.08.05 18:27
. * Re: Гепи 2 + AzSumZmei   08.08.05 19:34
. * Гепи 3 AzSumZmei   09.08.05 10:47
. * решението ти е идеално darklord   11.08.05 16:36
. * Re: Гепи 3 wqw   13.08.05 14:50
. * Re: Гепи 3 AzSumZmei   15.08.05 12:17
. * Re: Гепи 3 wqw   16.08.05 15:02
. * Re: Гепи 3 AzSumZmei   16.08.05 15:39
. * Re: Гепи 3 wqw   16.08.05 16:04
. * Re: SQL Server - номериране в групи unknown   11.08.05 18:55
. * Re: SQL Server - номериране в групи wqw   13.08.05 14:53
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.