Как соединить таблицы и добавить столбец в полученную таблицу?

Рейтинг: 0Ответов: 1Опубликовано: 01.04.2023

Есть две таблицы sch.t1:

"name" "spec" "sal" "from" "to"
"Имя1" "Специалист1" 10000 "2020-01-01" "2020-01-31"
"Имя1" "Специалист1" 12000 "2020-02-01" "2020-02-29"
"Имя1" "Специалист1" 13500 "2020-03-01" "2020-03-31"
"Имя1" "Специалист1" 15000 "2020-04-01" "2020-04-30"
"Имя1" "Специалист1" 15500 "2020-05-01" "2020-05-31"
"Имя1" "Специалист1" 16000 "2020-06-01" "2020-06-30"
"Имя1" "Специалист2" 17000 "2020-07-01" "2020-07-31"
"Имя1" "Специалист2" 17500 "2020-08-01" "2020-08-31"
"Имя1" "Специалист2" 19500 "2020-09-01" "2020-09-30"
"Имя1" "Специалист2" 20000 "2020-10-01" "9999-12-31"
"Имя2" "Специалист1" 10000 "2020-01-01" "2020-01-31"
"Имя2" "Специалист1" 12500 "2020-02-01" "2020-02-29"
"Имя2" "Специалист1" 13500 "2020-03-01" "2020-03-31"
"Имя2" "Специалист1" 16000 "2020-04-01" "2020-04-30"
"Имя2" "Специалист2" 17500 "2020-05-01" "2020-05-31"
"Имя2" "Специалист2" 20000 "2020-06-01" "2020-06-30"
"Имя2" "Специалист2" 22000 "2020-07-01" "2020-07-31"
"Имя2" "Специалист1" 23500 "2020-08-01" "2020-08-31"
"Имя2" "Специалист1" 26000 "2020-09-01" "2020-09-30"
"Имя2" "Специалист1" 27500 "2020-10-01" "2020-10-31"
"Имя2" "Специалист1" 28500 "2020-11-01" "2020-11-30"
"Имя2" "Специалист1" 29500 "2020-12-01" "9999-12-31"
"Имя3" "Специалист1" 10000 "2020-01-01" "2020-01-31"
"Имя3" "Специалист1" 11500 "2020-02-01" "2020-02-29"
"Имя3" "Специалист1" 13000 "2020-03-01" "2020-03-31"
"Имя3" "Специалист1" 14500 "2020-04-01" "2020-04-30"
"Имя3" "Специалист2" 17000 "2020-05-01" "2020-05-31"
"Имя3" "Специалист2" 18500 "2020-06-01" "2020-06-30"
"Имя3" "Специалист2" 19000 "2020-07-01" "2020-07-31"
"Имя3" "Специалист2" 20500 "2020-08-01" "2020-08-31"
"Имя3" "Специалист2" 23000 "2020-09-01" "2020-09-30"
"Имя3" "Специалист2" 25000 "2020-10-01" "9999-12-31"

И вторая sch.t2:

"date" "name" "pay"
"2020-01-07" "Имя1" 2000
"2020-01-14" "Имя1" 2000
"2020-01-21" "Имя1" 2500
"2020-01-31" "Имя1" 3500
"2020-02-07" "Имя1" 2000
"2020-02-14" "Имя1" 3000
"2020-02-21" "Имя1" 3000
"2020-02-29" "Имя1" 4000
"2020-03-07" "Имя1" 2500
"2020-03-14" "Имя1" 3000
"2020-03-21" "Имя1" 2000
"2020-03-31" "Имя1" 6000
"2020-04-07" "Имя1" 3500
"2020-04-14" "Имя1" 2000
"2020-04-21" "Имя1" 3500
"2020-04-30" "Имя1" 6000
"2020-05-07" "Имя1" 3500
"2020-05-14" "Имя1" 2000
"2020-05-21" "Имя1" 2500
"2020-05-31" "Имя1" 7500
"2020-06-07" "Имя1" 2500
"2020-06-14" "Имя1" 2500
"2020-06-21" "Имя1" 3500
"2020-06-30" "Имя1" 7500
"2020-07-07" "Имя1" 3500
"2020-07-14" "Имя1" 4000
"2020-07-21" "Имя1" 2000
"2020-07-31" "Имя1" 7500
"2020-08-07" "Имя1" 3000
"2020-08-14" "Имя1" 2500
"2020-08-21" "Имя1" 3000
"2020-08-31" "Имя1" 9000
"2020-09-07" "Имя1" 4000
"2020-09-14" "Имя1" 2000
"2020-09-21" "Имя1" 2500
"2020-09-30" "Имя1" 11000
"2020-10-07" "Имя1" 4000
"2020-10-14" "Имя1" 4500
"2020-10-21" "Имя1" 5000
"2020-10-31" "Имя1" 6500
"2020-11-07" "Имя1" 4500
"2020-11-14" "Имя1" 5000
"2020-11-21" "Имя1" 2000
"2020-11-30" "Имя1" 8500
"2020-12-07" "Имя1" 3000
"2020-12-14" "Имя1" 4000
"2020-12-21" "Имя1" 2500
"2020-12-31" "Имя1" 10500
"2020-01-07" "Имя2" 2500
"2020-01-14" "Имя2" 2000
"2020-01-21" "Имя2" 2500
"2020-01-31" "Имя2" 3000
"2020-02-07" "Имя2" 2000
"2020-02-14" "Имя2" 2000
"2020-02-21" "Имя2" 2500
"2020-02-29" "Имя2" 6000
"2020-03-07" "Имя2" 3000
"2020-03-14" "Имя2" 2500
"2020-03-21" "Имя2" 2000
"2020-03-31" "Имя2" 6000
"2020-04-07" "Имя2" 3000
"2020-04-14" "Имя2" 3500
"2020-04-21" "Имя2" 4000
"2020-04-30" "Имя2" 5500
"2020-05-07" "Имя2" 2000
"2020-05-14" "Имя2" 3500
"2020-05-21" "Имя2" 4000
"2020-05-31" "Имя2" 8000
"2020-06-07" "Имя2" 4000
"2020-06-14" "Имя2" 2500
"2020-06-21" "Имя2" 3000
"2020-06-30" "Имя2" 10500
"2020-07-07" "Имя2" 5000
"2020-07-14" "Имя2" 4500
"2020-07-21" "Имя2" 5500
"2020-07-31" "Имя2" 7000
"2020-08-07" "Имя2" 5500
"2020-08-14" "Имя2" 3000
"2020-08-21" "Имя2" 2000
"2020-08-31" "Имя2" 13000
"2020-09-07" "Имя2" 3500
"2020-09-14" "Имя2" 3000
"2020-09-21" "Имя2" 5000
"2020-09-30" "Имя2" 14500
"2020-10-07" "Имя2" 6000
"2020-10-14" "Имя2" 3500
"2020-10-21" "Имя2" 4000
"2020-10-31" "Имя2" 14000
"2020-11-07" "Имя2" 3500
"2020-11-14" "Имя2" 7000
"2020-11-21" "Имя2" 5500
"2020-11-30" "Имя2" 12500
"2020-12-07" "Имя2" 4500
"2020-12-14" "Имя2" 3000
"2020-12-21" "Имя2" 6500
"2020-12-31" "Имя2" 15500
"2020-01-07" "Имя3" 2000
"2020-01-14" "Имя3" 2500
"2020-01-21" "Имя3" 2000
"2020-01-31" "Имя3" 3500
"2020-02-07" "Имя3" 2500
"2020-02-14" "Имя3" 2000
"2020-02-21" "Имя3" 2500
"2020-02-29" "Имя3" 4500
"2020-03-07" "Имя3" 2000
"2020-03-14" "Имя3" 2500
"2020-03-21" "Имя3" 2500
"2020-03-31" "Имя3" 6000
"2020-04-07" "Имя3" 3500
"2020-04-14" "Имя3" 3000
"2020-04-21" "Имя3" 3500
"2020-04-30" "Имя3" 4500
"2020-05-07" "Имя3" 3500
"2020-05-14" "Имя3" 2500
"2020-05-21" "Имя3" 3500
"2020-05-31" "Имя3" 7500
"2020-06-07" "Имя3" 4500
"2020-06-14" "Имя3" 3500
"2020-06-21" "Имя3" 4000
"2020-06-30" "Имя3" 6500
"2020-07-07" "Имя3" 3500
"2020-07-14" "Имя3" 3500
"2020-07-21" "Имя3" 2500
"2020-07-31" "Имя3" 9500
"2020-08-07" "Имя3" 2000
"2020-08-14" "Имя3" 2000
"2020-08-21" "Имя3" 2000
"2020-08-31" "Имя3" 14500
"2020-09-07" "Имя3" 5000
"2020-09-14" "Имя3" 2000
"2020-09-21" "Имя3" 2500
"2020-09-30" "Имя3" 13500
"2020-10-07" "Имя3" 6000
"2020-10-14" "Имя3" 3000
"2020-10-21" "Имя3" 4500
"2020-10-31" "Имя3" 11500
"2020-11-07" "Имя3" 5000
"2020-11-14" "Имя3" 5000
"2020-11-21" "Имя3" 4500
"2020-11-30" "Имя3" 10500
"2020-12-07" "Имя3" 5000
"2020-12-14" "Имя3" 6000
"2020-12-21" "Имя3" 3500
"2020-12-31" "Имя3" 10500

Как мне объединить эти таблицы? и добавить еще один столбец "осталось выплатить за месяц"? Я написал такой код:

select 
    --*
    dsp.date,
    dgsh.name,
    dgsh.sal,
    dsp.payt,
    dgsh.from,
    dgsh.to
from sch.t1 as dgsh
inner join sch.t2 as dsp
    on dgsh.name = dsp.name

но мне выдает не верные данные, так как в столбцах date, from, to соединяется например так (Всю таблицу отобразить не могу, так как слишком много строк):

|"date"|"name"|"sal"|"pay"|"from"|"to"| | ---- | ---- | --- | --- | ---- | -- | |"2020-01-07"|"Имя1"|20000|2000|"2020-10-01"|"9999-12-31"| |"2020-01-07"|"Имя1"|19500|2000|"2020-09-01"|"2020-09-30"| |"2020-01-07"|"Имя1"|17500|2000|"2020-08-01"|"2020-08-31"| |"2020-01-07"|"Имя1"|17000|2000|"2020-07-01"|"2020-07-31"| |"2020-01-07"|"Имя1"|16000|2000|"2020-06-01"|"2020-06-30"| |"2020-01-07"|"Имя1"|15500|2000|"2020-05-01"|"2020-05-31"| |"2020-01-07"|"Имя1"|15000|2000|"2020-04-01"|"2020-04-30"| |"2020-01-07"|"Имя1"|13500|2000|"2020-03-01"|"2020-03-31"| |"2020-01-07"|"Имя1"|12000|2000|"2020-02-01"|"2020-02-29"| |"2020-01-07"|"Имя1"|10000|2000|"2020-01-01"|"2020-01-31"| |"..."|"..."|...|...|"..."|"..."| Это не правильно, так как date не входит в пределы from и to. как решить эту проблему? ия не знаю как мне в этой таблице добавить столбец с остатком выплаты на месяц

Ответы

▲ 0Принят

Вам нужно в join добавить, чтоб дата выдачи была в нужном промежутке и сгруппировать данные. Попробуйте так:

select t1.name,t1.spec,t1.sal,t1.from,t1.to,sum(t2.pay) as pay,t1.sal-sum(t2.pay) as topay
from t1
     inner join t2 on t1.name=t2.name and t2.date between t1.from and t1.to
group by t1.name,t1.spec,t1.sal,t1.from,t1.to