Как интегрировать этот SQL-запрос в другие вычисления в одном скрипте?

Поэтому я написал следующий запрос:

SELECT 
Store,
Revenue

  FROM [mydb].[dbo].[orders] as orders

  WHERE 
  order_date BETWEEN '2015-10-26' AND '2015-11-22'
  AND 
  type_desc = 'north'


  AND store_number

  NOT IN(
  SELECT DISTINCT store_number
  FROM [mydb].[dbo].[orders] 
  WHERE 
  order_date BETWEEN '2015-10-26' AND '2015-11-22'
  AND 
  type_desc = 'south')

  GROUP BY 
  Store,
  Revenue

Цель этого запроса - найти хранилище SELECT , SUM ( CASE WHEN type_desc = 'north' THEN Revenue ELSE 0 END ) как north_revenue , SUM ( CASE WHEN type_desc = 'south' THEN Revenue ELSE 0 END ) как south_revenue FROM [ mydb ] [ dbo ]. [ заказы ] o WHERE o . order_date BETWEEN '2015-10-26' AND '2015-11-22' GROUP BY store ; где магазин появляется на севере, но не на юге. Следующий запрос работает отлично, но я хотел бы знать, как я могу сделать более сжатую версию этого запроса, чтобы я мог интегрировать в него другие вещи. Полагаю, я почти хочу присоединиться к другим колонкам, которые вычисляют вещи. Таким образом, у меня было бы несколько столбцов в моем конечном результате, например, в прошлом году доход для всего магазина, в этом году выручка всех магазинов, выручка для севера и юга ETC ...

sql,sql-server-2008,

0

Ответов: 1


0

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

HAVING SUM(CASE WHEN type_desc = 'south' THEN Revenue ELSE 0 END) = 0

Это будет основная информация, которую вы хотите.

Если вам нужны только магазины с северным доходом и без южного дохода, вы можете добавить:

Revenue

(Примечание. Если Revenueможет быть отрицательным, то вам может понадобиться просто подсчитать значения, THEN 1а не THEN Revenue.)

SQL, SQL-сервер 2008,
Похожие вопросы