SQL Server CASE计数/不计数

时间:2018-10-12 14:59:47

标签: sql sql-server

我正在尝试选择通过数据库的订单数。

从订单中,我要检索3个部分

  1. 订单总数
  2. 可销售订单的订单计数
  3. 仅包含免费个样本
  4. 的订单的订单计数

如果订单仅包含免费样品,则该订单的总价值自然为0,如果为正常订单,则总价值自然为>0

总字段为十进制格式。

这是我目前正在尝试做的事情。

COUNT(gross) as 'TotalOrders',
COUNT(case when gross = 0.00 THEN null else gross end) as 'OrderCount', 
COUNT(case when gross > 0.00 THEN gross else null end) as 'Samples',

如果订单的COUNT()值为正,我如何才能使gross函数仅增加1?

我正在SQLServer

中进行此操作

我的结果显示TotalOrders1 但是 OrderCountSamples显示为0

谢谢。

3 个答案:

答案 0 :(得分:3)

这是您想要的吗?

sum(case when gross >= 0.00 then 1 else 0 end) as TotalOrders,
sum(case when gross = 0.00 then 1 else 0 end) as OrderCount, 
sum(case when gross > 0.00 then 1 else 0 end) as Samples

您可能想要> 0.00,但是TotalOrders将与Samples相同。

答案 1 :(得分:0)

作为样本广播(COUNT(CASE,当总值> 0.00 = THEN 1否则为NULL END)作为int)

答案 2 :(得分:0)

您建议的公式应该起作用

with test as (select 1 as gross union all select  -1 as gross union all select  2)
SELECT COUNT(CASE WHEN gross > 0.00 THEN gross ELSE null END) as 'Samples' from test