我正在尝试创建一个输出总数的查询,以及SQL-Server
中总数的子集。我可以想办法通过子查询来做到这一点,但这看起来像是一大堆工作。有没有更快的方式来编写此查询?
Table name: orders
OrderID Date Type OrderSize
1 1/1/2012 Electronics $282.02
2 1/1/2012 Electronics $1,000.56
3 1/1/2012 Books $17.25
4 1/1/2012 Books $10.00
我想要输出的内容如下所示:
Date ElectronicOrders ElectronicOrderSize BookOrders BookOrderSize
1/1/2012 2 $1,282.58 2 $27.25
我可以创建临时表,然后运行2个更新查询 - 1 WHERE Type = 'Electronics'
和1 WHERE Type = 'Books'
。
我在一些编程语言中看到的是R
,它是对变量进行子集化的能力。有没有办法让我这么说:
count(OrderID, Type = 'Electronics) as ElectronicOrders, sum(OrderSize, Type = 'Electronics') as ElectronicOrderSize
还是我坚持使用subqueries
和UPDATE queries
?
答案 0 :(得分:3)
我从来没有让新的PIVOT语法在我的脑海中有意义,但是您可以通过分组来执行数据透视表,并在case语句中使用聚合函数。
select [date], sum( case when type = 'Electronics' then (ordersize) else 0 end) AS ElectronicsSum,
sum( case when type = 'Electronics' then 1 else 0 end) AS ElectronicsCount,
sum( case when type = 'Books' then (ordersize) else 0 end) AS BooksSum,
sum( case when type = 'Books' then 1 else 0 end) AS BooksCoumt
from orders
group by [date]
我放了一个fiddle来测试它。如果Aaron B.提出解决方案,给他答案,我可能甚至都没有认识到它的灵活性。