Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите, как правильно написать запрос  [new]
user87
Member

Откуда:
Сообщений: 257
create table #Clients(Id,LastName,FirstName,TypeId)

insert into #Clients
values
(1,'Иванов','Евгений',1),
(2,'Тест1','Тест1',2),
(3, null, null,null),
(4,'Иванов2','Евгений2',1),
(5,'Иванов3','Евгений3',1),
(6,'Иванов5','Евгений5',2),
(7, null, null,null)

Подскажите, пожалуйста, в какую сторону копать, мне нужно следующее
Если TypeId = 2, То его мне нужно заменить на ближайший 1, т.е вторая строчка с Id = 2, должна будет TypeId = 1
Тоже самое необходимо сделать там где TypeId null, заменить его на ближайший 1, т.е для строчки с Id = 3, ближайшея будет первая строчка.
Далее 7-ю строчку заменить на 5, так там typeId = 1
Пробовал с кусрсором, но никак не могу запомнить ближайшую запись, подскажите, пожалуйста, как можно узнать ближайшую запись
2 фев 15, 11:43    [17205361]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
user87
Если TypeId = 2, То его мне нужно заменить на ближайший 1, т.е вторая строчка с Id = 2, должна будет TypeId = 1
Тоже самое необходимо сделать там где TypeId null, заменить его на ближайший 1, т.е для строчки с Id = 3, ближайшея будет первая строчка.
Далее 7-ю строчку заменить на 5, так там typeId = 1

И как же должен выглядеть ваш конечный результат ?
2 фев 15, 11:49    [17205423]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
user87
Member

Откуда:
Сообщений: 257
Конечный результат, должен быть следующим, все данные где TypeId <>1, должен замениться на ближайший где TypeId = 1, включая ФИО
2 фев 15, 11:53    [17205462]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
user87
Конечный результат, должен быть следующим, все данные где TypeId <>1, должен замениться на ближайший где TypeId = 1, включая ФИО

Не словами, а данными
2 фев 15, 11:54    [17205475]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
user87
Member

Откуда:
Сообщений: 257
Вот так должно быть
(1,'Иванов','Евгений',1),
(2,'Иванов','Евгений',1),
(3, 'Иванов','Евгений',1),
(4,'Иванов2','Евгений2',1),
(5,'Иванов3','Евгений3',1),
(6,'Иванов3','Евгений3',1),
(7, 'Иванов3','Евгений3',1),
2 фев 15, 11:55    [17205487]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
vova ivanov
Member [заблокирован]

Откуда:
Сообщений: 1090
user87
Вот так должно быть
(1,'Иванов','Евгений',1),
(2,'Иванов','Евгений',1),
(3, 'Иванов','Евгений',1),
(4,'Иванов2','Евгений2',1),
(5,'Иванов3','Евгений3',1),
(6,'Иванов3','Евгений3',1),
(7, 'Иванов3','Евгений3',1),
select a.Id,
	case when a.TypeId=1 then a.LastName else c.LastName end as LastName,
	case when a.TypeId=1 then a.FirstName else c.FirstName end as FirstName,
	case when a.TypeId=1 then a.TypeId else c.TypeId end as TypeId
from #Clients a
cross apply (select top 1 * from #Clients b where b.TypeId=1 and b.Id<a.Id order by b.Id desc) c

Id          LastName             FirstName            TypeId
----------- -------------------- -------------------- --------------------
2 Иванов Евгений 1
3 Иванов Евгений 1
4 Иванов2 Евгений2 1
5 Иванов3 Евгений3 1
6 Иванов3 Евгений3 1
7 Иванов3 Евгений3 1

(6 row(s) affected)
2 фев 15, 11:58    [17205532]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
vova ivanov
Member [заблокирован]

Откуда:
Сообщений: 1090
select a.Id,
	case when a.TypeId=1 then a.LastName else c.LastName end as LastName,
	case when a.TypeId=1 then a.FirstName else c.FirstName end as FirstName,
	case when a.TypeId=1 then a.TypeId else c.TypeId end as TypeId
from #Clients a
outer apply (select top 1 * from #Clients b where b.TypeId=1 and b.Id<a.Id order by b.Id desc) c
2 фев 15, 12:00    [17205546]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите, как правильно написать запрос  [new]
user87
Member

Откуда:
Сообщений: 257
Большое спасибо, супер
2 фев 15, 12:07    [17205617]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить