powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалйста с запросом
7 сообщений из 7, страница 1 из 1
Помогите пожалйста с запросом
    #32025655
Андре
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица:

a marsrut b
--------------------
первый
первый
первый
второй
второй
третий
третий
третий

То есть это таблица маршрутов. Поле marshrut идентифицрует маршрут. Поле а обозначает номер операции, причем для каждого маршрута он нумеруется с 10 с шагом 10. Поле b указывает на следующую оперцию ДАННОГО маршрута. Если это последняя операция в маршруте - ставится 0.

Можно ли только на SQL заполнить поля a и и следующим образом ?

a marsrut b
--------------------
10 первый 20
20 первый 30
30 первый 0
10 второй 20
20 второй 0
10 третий 20
20 третий 30
30 третий 0
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025661
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO
т.к. нет идентификатора записи, то только в цикле/курсоре
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025665
Андре
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо, это не так уж и страшно. Допустим структура будет такой:

id a marsrut b
--------------------
1 первый
2 первый
3 первый
4 второй
5 второй
6 третий
7 третий
8 третий

Теперь это возможно ?
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025678
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-- "Нет таких крепостей, перед которыми остановились бы большевики" В.И.Ленин
set nocount on
declare @t table(id int identity, a int null, m varchar(15), b int null)
insert @t(m) select 'первый'
insert @t(m) select 'первый'
insert @t(m) select 'первый'
insert @t(m) select 'второй'
insert @t(m) select 'второй'
insert @t(m) select 'третий'
insert @t(m) select 'третий'
insert @t(m) select 'третий'

update @t
set a=(select count(*) from @t t2 where t1.m=t2.m and t1.id>=t2.id)*10
from @t t1

update @t set b=a+10

update @t set b=0
from @t t1
where not exists (select * from @t t2 where t1.m=t2.m and t1.id<t2.id)
select * from @t
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025684
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и одни запросом

create table #temp1(id int identity , a int, marsrut nvarchar(50), b int)

insert #temp1(marsrut) values(N'первый')
insert #temp1(marsrut) values(N'первый')
insert #temp1(marsrut) values(N'первый')
insert #temp1(marsrut) values(N'первый')
insert #temp1(marsrut) values(N'второй')
insert #temp1(marsrut) values(N'второй')
insert #temp1(marsrut) values(N'третий')
insert #temp1(marsrut) values(N'третий')
insert #temp1(marsrut) values(N'третий')
insert #temp1(marsrut) values(N'четвертый')

declare @step int
set @step = 10


update #temp1 set a = b.a, b = b.b
from #temp1 a inner join
(select id, (cnt1+1) * @step AS a, CASE WHEN cnt2 > 0 THEN (cnt1+1)* @step+@step ELSE 0 END AS b
from
(select id,
(SELECT COUNT(*) FROM #temp1 b WHERE b.marsrut = a.marsrut and b.id < a.id) AS cnt1,
(SELECT COUNT(*) FROM #temp1 b WHERE b.marsrut = a.marsrut and b.id > a.id) AS cnt2
from #temp1 a
) AS a
) AS b on b.id = a.id

select * from #temp1 a
drop table #temp1



А вот что так будет быстрее - не уверен. Можете поэксперементировать
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025739
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я бы пересмотрел состав и структуру таблиц. Это же не только нарушение 3NF, это еще и 3 килограмма трудноусваяиваемых траблов.
...
Рейтинг: 0 / 0
Помогите пожалйста с запросом
    #32025814
Андре
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за помощь !!!

А структуру таблиц я изменить не могу - не я проктировал и не я сопровождаю. Я должен всего лишь данные в базу перенести.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалйста с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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