Сравните результаты двух операторов select

Как я могу сравнить результаты двух операторов select в TSQL (2014)?

мои оба запроса:

SELECT CallDisposition, count(CallDisposition) as Count
  FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
  where (DateTime between dateadd(minute,@timespan,convert(datetime2,(GETDATE())+ @count)) AND convert(datetime2,(GETDATE())+ @count))
  Group by CallDisposition

SELECT CallDisposition, count(CallDisposition) as Count
  FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
  where DateTime >= dateadd(minute,@timespan,convert(datetime2,(GETDATE())))
  Group by CallDisposition

Результаты запроса 1:

+-----------------+-------+
| CallDisposition | Count |
+-----------------+-------+
|               2 |     2 |
|               3 |     8 |
|               4 |     8 |
|               7 |    21 |
|              10 |    16 |
|              13 |   738 |
|              14 |    45 |
|              15 |    14 |
|              19 |     8 |
|              28 |    41 |
|              29 |    12 |
|              52 |    76 |
|              55 |    1  |
+-----------------+-------+

Результаты запроса 2:

+-----------------+-------+
| CallDisposition | Count |
+-----------------+-------+
|               2 |     4 |
|               3 |     7 |
|               4 |     6 |
|               6 |     2 |
|               7 |    22 |
|              10 |     6 |
|              13 |   703 |
|              14 |    67 |
|              15 |    11 |
|              19 |     4 |
|              26 |     1 |
|              28 |    62 |
|              29 |    10 |
|              52 |    79 |
+-----------------+-------+

Основная проблема заключается в том, что результаты обоих запросов могут быть разными. На основе приведенного выше примера: CallDisposition 6 и 26 отсутствуют в запросе 1. CallDispoition 55 отсутствует в запросе 2 Примечание. Можно ожидать значений CallDispoition от 0 до 100, может быть, это поможет?!

Ожидаемый результат должен выглядеть так:

+-----------------+-------+
| CallDisposition | Count |
+-----------------+-------+
| 2               |     2 |
| 3               |     1 |
| 4               |     2 |
| 6               |     2 |
| 7               |     1 |
| 10              |    10 |
| ..              |       |
| ..              |       |
| ..              |       |
| 52              |     3 |
| 55              |     1 |
+-----------------+-------+
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
70
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Честно говоря, я озадачен вашим ожидаемым результатом и тем, что сравнивает результаты. Так что мое решение не даст такого результата. Но, может быть, это поможет, указав вам правильное направление.

Вы можете полностью присоединиться к результатам на calldisposition. Таким образом, сосуществующие calldisposition будут располагаться рядом друг с другом. Если для calldisposition в одном результате никто не существует, в другом столбцы другого будут все NULL.

SELECT *
       FROM (SELECT calldisposition,
                    count(CallDisposition) count
                    FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
                    WHERE (datetime BETWEEN dateadd(minute, @timespan, convert(datetime2, (getdate()) + @count))
                                            AND convert(datetime2, (getdate()) + @count))
                    GROUP BY calldisposition) x
            FULL JOIN (SELECT calldisposition,
                              count(calldisposition) count
                              FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
                              WHERE datetime >= dateadd(minute, @timespan, convert(datetime2, (getdate())))
                       GROUP BY calldisposition) y
                      ON y.calldisposition = x.calldisposition;

Я бы, вероятно, вставил результаты во временную таблицу, а затем запросил ее. Используйте табличную переменную:

DECLARE @Results TABLE ([Source] VARCHAR(10), CallDisposition INT, [CallCount] INT)

(Используйте CallCount, так как это не зарезервированное слово)

INSERT INTO @Results(CallDisposition , CallCount, [Source])
SELECT CallDisposition, count(CallDisposition) as Count, [Source] = 'Query1',
  FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
  where (DateTime between dateadd(minute,@timespan,convert(datetime2,(GETDATE())+ @count)) AND convert(datetime2,(GETDATE())+ @count))
  Group by CallDisposition

Повторите со своим вторым запросом, установив Источник = 'Query2' (или объедините его в приведенной выше вставке).

Теперь вы можете проверить свои @Results:

SELECT r1.* FROM @Results r1 
WHERE [Source] = 'Query1'
AND NOT EXISTS (SELECT 'X' FROM @Results r2 WHERE [Source] = 'Query2' AND r2.CallDisposition = r1.CallDisposition)

(только пример; возможно, не самый проницательный)

Пожалуйста, простите любые небольшие синтаксические ошибки; Передо мной нет SQL Server.

Ответ принят как подходящий
WITH S1 AS (SELECT CallDisposition, count(CallDisposition) as Count
  FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
  where (DateTime between dateadd(minute,@timespan,convert(datetime2,(GETDATE())+ @count)) AND convert(datetime2,(GETDATE())+ @count))
  Group by CallDisposition
)
,S2 AS (
SELECT CallDisposition, count(CallDisposition) as Count
  FROM [bs_Reporting].[dbo].[Termination_Call_Detail]
  where DateTime >= dateadd(minute,@timespan,convert(datetime2,(GETDATE())))
  Group by CallDisposition
)
Select ISNULL(S1.CallDisposition,S2.CallDisposition) AS CallDisposition
      ,ABS(ISNULL(S1.COUNT,0)-ISNULL(S2.Count,0)) Count
FROM S1 FULL JOIN S2
      ON S1.CallDisposition=s2.CallDisposition

Добро пожаловать в Stack Overflow. Я не запускал этот код, но похоже, что он даст результат, который ищет исходный постер. «Ответы только для кода», однако, не имеют большой долгосрочной ценности. Вам следует подумать о редактировании своего поста, чтобы включить в него объяснение того, что делает ваш код и как он решает проблему. Это поможет как ОП, так и всем, кто встретит этот пост в будущем.

Eric Brandt 09.04.2019 16:41

Другие вопросы по теме