Я пытаюсь присоединиться к двум таблицам, но столбцы emp_id и schem_id могут быть пустыми или не заполнены ни в одной из таблиц, но если они заполнены, то мне нужно вернуть общее pen_ee для этого сотрудника для каждой схемы (далее описание ниже). Я не могу редактировать структуру таблицы и работать с тем, что у меня есть.SQL Полное соединение на двух столбцах
Я пытался использовать полное соединение для этого, но не понимаю, можете ли вы выполнить полное соединение на двух полях emp_id & schem_id, чтобы получить требуемый результат.
Таблица PAYAUDPEN
Это первые два месяца года.
- Сотрудник А дал 44.06 для схемы BMAL.
- Сотрудник B дал 98,06 для схемы BMAL.
- Сотрудник B предоставил 98,06 для схемы CLFL.
emp_id, period_id, scheme_id, pen_ee
A, 201601, BMAL, 22.03
A, 201602, BMAL, 22.03
B, 201601, BMAL, 98.06
B, 201602, CLFL, 98.06
Таблица PAYISPEN
Это третий & текущий месяц года. Система всегда помещает текущий месяц в эту таблицу)
- Сотрудник А дал 22.03.
- Сотрудник B дал 98.06.
(Примечание сотрудника B больше не вносит вклад в схему BMAL в месяце 3, что является частью проблемы).
emp_id, scheme_id, pen_ee
A, BMAL, 22.03
B, CLFL, 98.06
Требуемый результат SQL-оператор должен вернуть 3 периода суммируются, для каждого сотрудника для каждой схемы, что они способствовали.
- Сотрудник А будет 44,06 + 22,03 = 66,09 для схемы BMAL.
- Сотрудник B будет 98,06 + NULL = 98,06 для схемы BMAL.
- Сотрудник B будет 98,06 + 98,06 = 196,12 для схемы CLFL.
A, BMAL, 66.09
B, BMAL, 98.06
B, CLFL, 196.12
Для создания основы двух таблиц и заполнения в примере выше данные запустить следующие запросы.
CREATE TABLE [dbo].[payaudpen](
[emp_id] [char](10) NOT NULL,
[period_id] [char](6) NOT NULL,
[scheme_id] [char](10) NOT NULL,
[pen_ee] [numeric](15, 2) NULL)
CREATE TABLE [dbo].[payispen](
[emp_id] [char](10) NOT NULL,
[scheme_id] [char](10) NOT NULL,
[pen_ee] [numeric](15, 2) NULL)
INSERT INTO payaudpen VALUES ('A','201601','BMAL','22.03'), ('A','201602','BMAL','22.03'), ('B','201601','BMAL','98.06'), ('B','201602','CLFL','98.06')
INSERT INTO payispen VALUES ('A','BMAL','22.03'), ('B','CLFL','98.06')
Текущее утверждение, что я использую:
SELECT a.emp_id,
a.scheme_id,
SUM(a.pen_ee)+AVG(b.pen_ee)
FROM payaudpen a
FULL JOIN payispen b
ON a.emp_id=b.emp_id
GROUP BY a.scheme_id, a.emp_id
Неправильный результат
Не возвращает правильное значение для сотрудников B для каждой схемы.
A, BMAL, 66.09
B, BMAL, 196.12
B, CLFL, 196.12
Значение «C» загадочно появляется в желаемых результатах, но не находится ни в одном из входных столбцов. –
Я читал вопрос и думал то же самое! Откуда это взялось? значение «C» –
Я думаю, что OP означало «...» в конце примерных таблиц. –