У меня есть два набора данных, которые я хотел бы объединить и возвратить их одновременно, однако столбец, к которому мне нужно будет присоединиться, может иметь значение в наборе A, а не в наборе B, и наоборот, поэтому ВЛЕВО/ ПРАВАЯ СОЕДИНЕНИЯ не идеальны.
Задать A
Запрос -
SELECT o.organisation_id,
Count(call_opened) 'opened calls',
Format(call_opened, 'MMM-yy')'month name',
call_severity
FROM call c
JOIN users u
ON u.user_id = c.user_id
JOIN organisation o
ON o.organisation_id = u.organisation_id
WHERE Call_Type = 'FT'
GROUP BY o.organisation_id,
Format(call_opened, 'MMM-yy'),
call_severity
Возвраты -
organisation_id opened calls month name call_severity
BES 1 Apr-12 3
BES 1 Dec-13 3
BES 1 Jun-12 3
BES 1 Mar-12 3
BES 2 Nov-11 3
BES 1 Oct-11 3
Набор B
Запрос -
SELECT o.organisation_id,
Count(call_closed) 'closed calls',
Format(call_closed, 'MMM-yy')'month name',
call_severity
FROM call c
JOIN users u
ON u.user_id = c.user_id
JOIN organisation o
ON o.organisation_id = u.organisation_id
WHERE Call_Type = 'FT'
GROUP BY o.organisation_id,
Format(call_closed, 'MMM-yy'),
call_severity
Возвраты -
organisation_id closed calls month name call_severity
BES 2 Aug-13 3
BES 1 Dec-11 3
BES 1 Dec-13 3
BES 1 Mar-12 3
BES 1 Nov-11 3
BES 1 Sep-12 3
Пока
Запрос-
SELECT opened.organisation_id,
Isnull(opened.[opened calls],0) 'opened calls',
Isnull(closed.[closed calls],0) 'closed calls',
opened.[month name],
opened.call_severity
FROM (SELECT o.organisation_id,
Count(call_opened) 'opened calls',
Format(call_opened, 'MMM-yy')'month name',
call_severity
FROM call c
JOIN users u
ON u.user_id = c.user_id
JOIN organisation o
ON o.organisation_id = u.organisation_id
WHERE Call_Type = 'FT'
GROUP BY o.organisation_id,
Format(call_opened, 'MMM-yy'),
call_severity) opened
LEFT JOIN (SELECT o.organisation_id,
Count(call_closed) 'closed calls',
Format(call_closed, 'MMM-yy')'month name',
call_severity
FROM call c
JOIN users u
ON u.user_id = c.user_id
JOIN organisation o
ON o.organisation_id = u.organisation_id
WHERE Call_Type = 'FT'
GROUP BY o.organisation_id,
Format(call_closed, 'MMM-yy'),
call_severity) closed
ON opened.organisation_id = closed.organisation_id
AND opened.[month name] = closed.[month name]
AND opened.call_severity = closed.call_severity
WHERE opened.Call_Severity <> 5
ORDER BY opened.organisation_id ASC
Возвращает -
organisation_id opened calls closed calls month name call_severity
BES 1 0 Apr-12 3
BES 1 1 Dec-13 3
BES 1 0 Jun-12 3
BES 1 1 Mar-12 3
BES 2 1 Nov-11 3
BES 1 0 Oct-11 3
Как вы можете видеть, это не возвращает нужные мне данные из-за набора B, содержащего данные за месяцы, которых нет в наборе A.
В идеале я хотел бы, чтобы данные возвращались следующим образом -
organisation_id opened calls closed calls month name call_severity
BES 1 0 Apr-12 3
BES 1 1 Dec-13 3
BES 1 0 Jun-12 3
BES 1 1 Mar-12 3
BES 2 1 Nov-11 3
BES 1 0 Oct-11 3
BES 0 2 Aug-13 3
BES 0 1 Dec-11 3
BES 0 1 Sep-12 3
Я думал о создании исходной временной таблицы и вставке значений месяца и объединении наборов результатов для этого, но этобыть слишком хакерским и беспорядочным из-за данных, относящихся к 2002 году, это то, что мне нужно, или мне нужно переделать решение?
Я худk это все данные, необходимые из таблицы вызовов -
Call_ID Call_Opened Call_Closed Call_Severity User_id
28000001 2011-10-19 13:13:48.000 2011-11-09 11:47:03.000 3 825
28000002 2011-11-07 10:55:24.000 2012-03-05 08:27:54.000 3 825
28000003 2011-11-21 09:11:49.000 2011-12-19 08:41:36.000 3 825
28000006 2012-03-30 15:11:23.000 2013-08-29 15:51:39.000 3 825
28000007 2012-04-02 11:50:22.000 2013-08-29 15:52:11.000 3 825
28000008 2012-06-25 08:12:39.000 2012-09-28 16:32:08.000 3 825
28000012 2013-12-17 07:41:26.000 2013-12-17 08:58:35.000 3 825