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

Откуда:
Сообщений: 2
Здравствуйте, помогите пожалуйста новичку в программировании.

В приложенной картинке есть 2 таблицы.

На таблице №1 изображены 3 колонки.

1. Дата
2. Колонка 1
3. Колонка 2

И они заполнены данными.

Таблица №2 дублирует таблицу №1, но данные в колонке №1 и колонке №2 имеют сдвиг.

Как показано на картинке, необходимо чтобы какой именно будет сдвиг было указано в 3ей табличке.

Таким образом этот сдвиг будет легко настраиваемым и адаптивным.

Помогите пожалуйста, как получить подобный результат в Microsoft SQL Server

Прошу прощения если объяснил запутанно или недостаточно раскрыто.

Всем заранее больше спасибо.

К сообщению приложен файл. Размер - 37Kb
2 фев 19, 17:57    [21800491]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36972
row_number() для всех трех полей, после для [колонка 1] и [колонка 2] прибавить соответсвуюший сдвиг и поджоинить по резултирующему номеру.
2 фев 19, 19:27    [21800515]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL / MS SQL Server. Нужна помощь новичку  [new]
Connor_Johanson
Member

Откуда:
Сообщений: 2
Гавриленко Сергей Алексеевич,

Имеешь в виду, для каждый колонки в таблице 1 сделать соответствующую колонку с ID (как в прикреплённой картинке)

А затем сделать таблицу сдвигов

А затем для таблицы №2 сделать формулу где будет сумма изначального ID строчки + значение сдвига?

К сообщению приложен файл. Размер - 35Kb
2 фев 19, 20:02    [21800530]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL  [new]
invm
Member

Откуда: Москва
Сообщений: 9348
declare @t table (d date, c1 int, c2 int);

insert into @t
values
 ('20180101', 110, 106),
 ('20180201', 115, 109),
 ('20180301', 126, 118),
 ('20180401', 138, 112),
 ('20180501', 147, 127);

declare @s table (s1 int, s2 int);
insert @s
values
 (1, 2);

select * from @t order by d;

select
 t.d,
 lead(t.c1, s.s1) over (order by t.d),
 lead(t.c2, s.s2) over (order by t.d)
from
 @t t cross join
 @s s
order by
 t.d;
2 фев 19, 20:32    [21800539]     Ответить | Цитировать Сообщить модератору
 Re: T-SQL / MS SQL Server. Нужна помощь новичку  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7760
Connor_Johanson,

задача решается прибавлением к значениям в колонке даты первой таблицы смещения для этого года-месяца, указанного в третьей таблице. Можно использовать функцию DATEADD().
3 фев 19, 01:47    [21800647]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить