Last active
March 10, 2019 12:15
-
-
Save ezhov-da/6bdf4f58cd11dc5ebaa2c0c2aca85288 to your computer and use it in GitHub Desktop.
перестроение столбца из длины в ширину
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Решение SQL задачи на перестроение столбца из длины в ширину при наличии идентификатора понимания 1 и 2 значения: | |
Задача: | |
Дана таблица: | |
ID ДАТА ПОРЯДОК | |
1 10 1 | |
1 12 2 | |
1 14 1 | |
1 16 2 | |
2 18 1 | |
2 20 2 | |
2 22 1 | |
2 24 2 | |
3 26 1 | |
3 28 2 | |
3 30 1 | |
3 32 2 | |
Необходимо преобразовать ее к виду: | |
ID ДАТА С ДАТА ПО РАЗНИЦА | |
1 10 12 2 | |
1 14 16 2 | |
2 18 20 2 | |
2 22 24 2 | |
3 26 28 2 | |
3 30 32 2 | |
Решение: | |
Для исходных данных вывести даты для 1 и 2 в разные столбцы: | |
select | |
ID | |
,ДАТА | |
,ПОРЯДОК | |
,case when ПОРЯДОК = 1 then ДАТА else null end as ДАТА С | |
,case when ПОРЯДОК = 2 then ДАТА else null end as ДАТА ПО | |
from ТАБЛИЦА | |
Для полученных данных взять минимум в разрезе одной предыдущей и текущей строки по обеим датам: | |
select | |
ID | |
,ДАТА | |
,ПОРЯДОК | |
,ДАТА С, | |
,ДАТА ПО | |
,min(ДАТА С) over (partition by ID ORDER BY ID, ДАТА ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) as МИН ДАТА С, | |
,min(ДАТА ПО) over (partition by ID ORDER BY ID, ДАТА ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) as МИН ДАТА ПО | |
from ТАБЛИЦА | |
Оставить только данные с ПОРЯДОК = 2; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment