Добавление недостающих записей из других столбцов в другую таблицу - PullRequest
0 голосов
/ 12 марта 2019

У меня есть 2 таблицы:

Таблица A:

    A | B | C   |  D
   qwe  4  2019   10
   qwe  2  2020   5
   qwe  5  2019   5

Таблица B:

A | B 
3  2019
4  2019
5  2019
6  2019
7  2019
8  2019
9  2019
10 2019
11 2019
12 2019
1  2020
2  2020

Я хочу, чтобы выходная таблица содержала все числа и годы стаблица B в таблице A. Таким образом, текст qwe должен быть показан 12 раз с соответствующими номерами.

Выходная таблица:

A  | B | C  | D
qwe  3  2019  0
qwe  4  2019  10
qwe  5  2019  5
qwe  6  2019  0
qwe  7  2019  0
qwe  8  2019  0
qwe  9  2019  0
qwe 10 2019   0
qwe 11 2019   0
qwe 12 2019   0
qwe 1  2020   0
qwe 2  2020  5

Примечание: Таблица A содержит больше значений, чем qwe, поэтому япытаясь воспроизвести 12 значений для всех различных записей.Столбец D должен показывать 0 для записей, которые не существуют.

Я попытался выполнить полное внешнее соединение, но полное внешнее объединение дает 12 записей для каждой записи qwe в таблице A.

Ответы [ 3 ]

1 голос
/ 12 марта 2019

как насчет кросс-соединения

     with cte as
(
select 'qwe' as A, 4 as B, 2019 as C, 10 as D
union all
select 'qwe',2,2020,5
union all
select 'qwe',5,2019,5
),
cte1 as
(
select 3 as A, 2019 as B union all
select 4 , 2019 union all
select 5 , 2019 union all
select 6,  2019 union all
select 7,  2019 union all
select 8,  2019 union all
select 9,  2019 union all
select 10,  2019 union all
select 11,  2019 union all
select 12,  2019 union all
select 1,  2020 union all
select 2,  2020 
)
  , cte3 as
  (select distinct a.A,b.A  as B,b.B as c 
   from cte1 b cross join (select A from cte) a
   ) select distinct t1.*,coalesce(t2.D,0) as D from cte3 t1 left join cte t2 
    on t1.A=t2.A and t1.C=t2.C and t1.B=t2.B

выход

 A  B    c      D
qwe 3   2019    0
qwe 4   2019    10
qwe 5   2019    5
qwe 6   2019    0
qwe 7   2019    0
qwe 8   2019    0
qwe 9   2019    0
qwe 10  2019    0
qwe 11  2019    0
qwe 12  2019    0
qwe 1   2020    0
qwe 2   2020    5
0 голосов
/ 12 марта 2019

Последний столбец прост. , , left join

select b.a, b.b, coalesce(a.d, 0) as d
from b left join
     a
     on b.a = a.b and b.b = a.c;

Первый столбец на самом деле не имеет смысла, но возможно:

select max(a.a) over () as a,
       b.a as b, b.b as c, coalesce(a.d, 0) as d
from b left join
     a
     on b.a = a.b and b.b = a.c;
0 голосов
/ 12 марта 2019

Вы можете добавить различные выберите отличное * от ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...