Member 12839758 Ответов: 1

Вычесть результат из двух запросов


У меня есть два запроса, которые мне нужно вычесть, я первый запрос получаю такие результаты :

ROOMS | ROOM_Type
    3 | JRS
    7 | HPT


А второй возвращается

ROOMS | ROOM_Type
    13 | JRS
    11 | HPT


мне нужно получить 1 результат в котором оба запроса вычитают друг друга делая общий подсчет таким образом:

ROOMS | ROOM_Type
   10 | JRS
    4 | HPT


Что я уже пробовал:

Я попробовал кроме метода и (Select (...) - Select (...) без каких-либо результатов, я не знаю, как заставить их вычесть свой первый результат
Это мои 2 запроса

Запрос 1
<pre>SELECT SUM(ROOMS), [ROOMS_Type] FROM   
  [RESERVATION]
WHERE  (SALIDA > N'2016-10-03') AND (ESTATUS = N'RV') AND (LLEGADA <= N'2016-10-03')
GROUP BY [ROOMS_Type]
ORDER BY ROOMS_Type


Запрос 2:
<pre>SELECT SUM(ROOMS) , [ROOMS_Type] 
FROM     [CHECKINS]
WHERE  (SALIDA > N'2016-10-03') AND (ESTATUS = N'IN')
GROUP BY [ROOMS_Type]

1 Ответов

Рейтинг:
0

Bryian Tan

Обновлено для использования CTE. Оберните оба запроса в общее табличное выражение.

Это должно сработать. Я видел запрос 1 и 2 поздно, но концепция все та же, в вашем случае предположим, что RESERVATION = #test1, CHECKINS=#test2

WITH cteReservation AS (SELECT SUM(ROOMS) ROOMS, [ROOMS_Type] FROM   
  [RESERVATION]
WHERE  (SALIDA > N'2016-10-03') AND (ESTATUS = N'RV') AND (LEGADA <= N'2016-10-03')
GROUP BY [ROOMS_Type]
--ORDER BY ROOMS_Type
), cteCheckins AS (
SELECT SUM(ROOMS) Rooms, [ROOMS_Type] 
FROM     [CHECKINS]
WHERE  (SALIDA > N'2016-10-03') AND (ESTATUS = N'IN')
GROUP BY [ROOMS_Type] )

SELECT t2.ROOMS - t1.ROOMS 'ROOMS', t1.[ROOMS_Type]   FROM 
cteCheckins t2 JOIN cteReservation t1
ON t2.[ROOMS_Type] = t1.[ROOMS_Type]
ORDER BY t1.[ROOMS_Type] DESC

Выход:
ROOMS	ROOMS_Type
  10	JRS
   4	HPT


Member 12839758

Этот anwser делает то, что я хочу, но я не хочу создавать таблицу для каждого из моих запросов, могу ли я сделать это в 1 stament? или я должен использовать временную таблицу для каждого запроса, а затем использовать "-"??

Bryian Tan

Вам не нужно создавать временную таблицу, я использовал временную таблицу в качестве примера.

Вы можете использовать общее табличное выражение cte , https://www.simple-talk.com/sql/t-sql-programming/sql-server-cte-basics/

Bryian Tan

Я обновил пример, чтобы использовать CTE.

Member 12839758

Спасибо Вам большое, я понимаю ваше решение и мог бы реализовать его правильно, но теперь я хочу вычесть два CTE и дать один результат, но не могу этого сделать, я опубликую свой подход