Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Left Join в цикле / 7 сообщений из 7, страница 1 из 1
28.11.2019, 11:22
    #39895451
dimonovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
Здравствуйте.
Можно ли задействовать (и как) в цикле Left Join?

Код: sql
1.
2.
3.
4.
SELECT *
  FROM      (SELECT f1, f2 FROM tbl1 WHERE f3 = '2018') AS t1 
  LEFT JOIN (SELECT f1, f2 FROM tbl1 WHERE f3 = '2019') AS t2 ON t2.f1 = t1.f1
  LEFT JOIN (SELECT f1, f2 FROM tbl1 WHERE f3 = '2020') AS t3 ON t3.f1 = t1.f1



Хочу сделать что то на подобии

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE @yr AS INT = 2018

SELECT *
  FROM  (SELECT f1, f2 FROM tbl1 WHERE f3 = @yr) AS t1 

WHILE @yr <= YEAR(GETDATE())+1
 BEGIN
   SET @yr = @yr + 1
   LEFT JOIN (SELECT f1, f2 FROM tbl1 WHERE f3 = @yr) ON f1 = t1.f1
END



но такое не проходит.
можно как то динамически задавать количество джоийнов?

Спасибо.
...
Рейтинг: 0 / 0
28.11.2019, 11:38
    #39895465
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
dimonovych
можно как то динамически задавать количество джоийнов?
Сформировать запрос как строку, а потом эту строку выполнить.
...
Рейтинг: 0 / 0
28.11.2019, 11:46
    #39895469
dimonovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
Чтоб было более понятно
Есть
f1 f2 f31 some data1 20182 some data1 20183 some data1 20181 some data2 20192 some data2 20193 some data2 20191 some data3 20202 some data3 20203 some data3 2020

Нужно


f1 f2 f3 f1 f2 f3 f1 f2 f31 some data1 2018 1 some data2 20191 some data3 20202 some data1 2018 2 some data2 20192 some data3 20203 some data1 2018 3 some data2 20193 some data3 2020
...
Рейтинг: 0 / 0
28.11.2019, 12:37
    #39895506
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
dimonovych,

ищите по слову PIVOT
вопрос всплывает каждую неделю по 3 раза
...
Рейтинг: 0 / 0
28.11.2019, 13:02
    #39895531
dimonovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
iiyama
dimonovych,

ищите по слову PIVOT
вопрос всплывает каждую неделю по 3 раза


Искал.
Насколько я понял PIVOT может сделать так:

f1 f2 2018 2019 2020 1 some data15055602 some data160 50403 some data1404550

Как с его помощью получить мой варпиант - я не нашел
...
Рейтинг: 0 / 0
28.11.2019, 13:03
    #39895533
dimonovych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
alexeyvg
dimonovych
можно как то динамически задавать количество джоийнов?
Сформировать запрос как строку, а потом эту строку выполнить.

Спасибо.
Пока так и сделал.
...
Рейтинг: 0 / 0
28.11.2019, 13:07
    #39895538
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Left Join в цикле
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select 
  -- 2018
  f1 
  , f2 =  max(case f3 when 2018 then f2 end)
  , f3 =  max(case f3 when 2018 then f3 end)

  --2019
  , f1 
  , f2 =  max(case f3 when 2019 then f2 end)
  , f3 =  max(case f3 when 2019 then f3 end)

  --2020
  , f1 
  , f2 =  max(case f3 when 2020 then f2 end)
  , f3 =  max(case f3 when 2020 then f3 end)
from ... 
group by  f1
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Left Join в цикле / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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