Я пытаюсь объединить 2 таблицы и ограничить вывод правой таблицы на основе поля ob. [Type]. Сначала я пытался сохранить значения NULL для левого объединения, но затем я прочитал этот вопрос
SQL Соединение с нулевой таблицей сервера
и переведено условие WHERE в состояние ON.
Это код, который я сейчас использую
SELECT
CASE
WHEN
datepart(MM,ib.[Start Time]) > 3
and
datepart(MM,ib.[Start Time]) < 11
THEN
dateadd(hh,1,ib.[Start Time])
ELSE ib.[Start Time]
END as [Start Time]
,ib.[reference]
,[Charged Op. (sec)]
,ob.[Reference]
,ob.Duration
FROM [iPR].[dbo].[InboundCallsView] ib
left join
[iPR].[dbo].[OutboundCallStatus] ob
on ib.Reference = ob.Reference
and ob.[type] = 'Outbound call'
and
CASE
WHEN
datepart(MM,ib.[Start Time]) > 3
and
datepart(MM,ib.[Start Time]) < 11
THEN
dateadd(hh,1,ib.[Start Time])
ELSE ib.[Start Time]
END
Between '2019-12-01' and '2019-12-02'
and
ib.[account] in
(SELECT [accountno]
from idata3.dbo.[N242316])
where
ib.[type] = 'normal operator call'
-- and ob.[type] = 'Outbound call'
and
ib.[account] in
(SELECT [accountno]
from idata3.dbo.[N242316])
and
CASE
WHEN
datepart(MM,ib.[Start Time]) > 3
and
datepart(MM,ib.[Start Time]) < 11
THEN
dateadd(hh,1,ib.[Start Time])
ELSE ib.[Start Time]
END
Between '2019-12-01' and '2019-12-02'
order by ib.[Start Time]
, и он создает такой результат
+---------------------+-----------+-------------------+-----------+----------+
| Start Time | reference | Charged Op. (sec) | Reference | Duration |
+---------------------+-----------+-------------------+-----------+----------+
| 01/12/2019 04:14:15 | W9DR4PBW | 324 | W9DR4PBW | 68 |
| 01/12/2019 04:29:12 | QX3652QA | 37 | NULL | NULL |
| 01/12/2019 08:07:11 | LEB4EP4X | 614 | LEB4EP4X | 74 |
| 01/12/2019 08:38:15 | W7CRW7M7 | 39 | NULL | NULL |
| 01/12/2019 08:58:25 | G976V9Q7 | 242 | NULL | NULL |
| 01/12/2019 09:12:55 | CTTGVRWK | 29 | NULL | NULL |
| 01/12/2019 09:20:29 | JRY77JSQ | 244 | JRY77JSQ | 6 |
| 01/12/2019 09:20:29 | JRY77JSQ | 244 | JRY77JSQ | 5 |
| 01/12/2019 09:20:29 | JRY77JSQ | 244 | JRY77JSQ | 5 |
| 01/12/2019 10:04:42 | 8M47UYWQ | 285 | 8M47UYWQ | 88 |
| 01/12/2019 11:35:18 | A6YVL5TW | 19 | NULL | NULL |
| 01/12/2019 12:17:23 | A86ERNVX | 13 | NULL | NULL |
| 01/12/2019 12:27:15 | GWQ8442D | 47 | NULL | NULL |
| 01/12/2019 13:10:22 | VVLXJU44 | 122 | NULL | NULL |
| 01/12/2019 13:26:04 | 8RL23TF6 | 20 | NULL | NULL |
| 01/12/2019 13:47:54 | SAY6LZ7T | 172 | NULL | NULL |
| 01/12/2019 14:38:37 | J7QBPPGV | 158 | NULL | NULL |
| 01/12/2019 18:25:29 | PKU4EB5X | 10 | NULL | NULL |
| 01/12/2019 20:57:50 | JDK6WAF6 | 8 | NULL | NULL |
| 01/12/2019 20:58:28 | 9KYMCJ8J | 29 | NULL | NULL |
+---------------------+-----------+-------------------+-----------+----------+
Это почти идеально. Однако он возвращает 20 строк, а я хочу только 18. Ссылка JRY77JSQ имеет только 1 входящий вызов, но 3 исходящих вызова. То, что я хочу сделать, это СУММИТЬ 6, 6 и 5-секундную длительность 3-х исходящих вызовов и иметь эту единственную строку со ссылкой JRY77JSQ. ie
+---------------------+-----------+-------------------+-----------+----------+
| Start Time | reference | Charged Op. (sec) | Reference | Duration |
+---------------------+-----------+-------------------+-----------+----------+
| 01/12/2019 04:14:15 | W9DR4PBW | 324 | W9DR4PBW | 68 |
| 01/12/2019 04:29:12 | QX3652QA | 37 | NULL | NULL |
| 01/12/2019 08:07:11 | LEB4EP4X | 614 | LEB4EP4X | 74 |
| 01/12/2019 08:38:15 | W7CRW7M7 | 39 | NULL | NULL |
| 01/12/2019 08:58:25 | G976V9Q7 | 242 | NULL | NULL |
| 01/12/2019 09:12:55 | CTTGVRWK | 29 | NULL | NULL |
| 01/12/2019 09:20:29 | JRY77JSQ | 244 | JRY77JSQ | 16 |
| 01/12/2019 10:04:42 | 8M47UYWQ | 285 | 8M47UYWQ | 88 |
| 01/12/2019 11:35:18 | A6YVL5TW | 19 | NULL | NULL |
| 01/12/2019 12:17:23 | A86ERNVX | 13 | NULL | NULL |
| 01/12/2019 12:27:15 | GWQ8442D | 47 | NULL | NULL |
| 01/12/2019 13:10:22 | VVLXJU44 | 122 | NULL | NULL |
| 01/12/2019 13:26:04 | 8RL23TF6 | 20 | NULL | NULL |
| 01/12/2019 13:47:54 | SAY6LZ7T | 172 | NULL | NULL |
| 01/12/2019 14:38:37 | J7QBPPGV | 158 | NULL | NULL |
| 01/12/2019 18:25:29 | PKU4EB5X | 10 | NULL | NULL |
| 01/12/2019 20:57:50 | JDK6WAF6 | 8 | NULL | NULL |
| 01/12/2019 20:58:28 | 9KYMCJ8J | 29 | NULL | NULL |
+---------------------+-----------+-------------------+-----------+----------+
То, что я пытался сделать, это заменить каждый символ столбца на MAX ([столбец]), за исключением ob. [Duration], который я заменил на SUM (ob. [Duration]). К сожалению, это вернуло меня к моей первоначальной проблеме, когда NULL исчезли, и у меня остались только 4 строки, которые имели информацию из таблицы [iPR]. [Dbo]. [OutboundCallStatus]. Как мне группировать, сохраняя NULL?