SQL-Server - 能否在select中传递子集参数?

时间:2012-03-13 01:28:53

标签: sql sql-server

我正在尝试创建一个输出总数的查询,以及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

还是我坚持使用subqueriesUPDATE queries

1 个答案:

答案 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.提出解决方案,给他答案,我可能甚至都没有认识到它的灵活性。