所以我写了以下查询:
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
此查询的目的是查找商店出现在北方而非南方的收入。下面的查询工作完美,但我想知道的是我如何制作一个更简洁的查询版本,以便我可以将其他东西集成到其中。我想我几乎想加入其他列来计算事物。所以我的最终结果中会有多列,例如去年所有商店的收入,今年所有商店的收入,以及南北ETC的收入......
答案 0 :(得分:0)
您可以使用条件汇总按南北收入对商店进行分类:
SELECT store,
SUM(CASE WHEN type_desc = 'north' THEN Revenue ELSE 0 END) as north_revenue,
SUM(CASE WHEN type_desc = 'south' THEN Revenue ELSE 0 END) as south_revenue
FROM [mydb].[dbo].[orders] o
WHERE o.order_date BETWEEN '2015-10-26' AND '2015-11-22'
GROUP BY store;
这似乎是您想要的基本信息。
如果您只想要北方收入且没有南方收入的商店,您可以添加:
HAVING SUM(CASE WHEN type_desc = 'south' THEN Revenue ELSE 0 END) = 0
(注意:如果Revenue
可能为否定,那么您可能只想使用THEN 1
而不是THEN Revenue
计算值。)