Sql Server案例计数/不计数

Sql Server案例计数/不计数,sql,sql-server,Sql,Sql Server,我正在尝试选择通过我们的数据库的订单数量 从订单中,我想检索3个部分 订单总数 可销售订单的订单计数 仅包含免费样品的订单计数 如果订单仅包含免费样品,则该订单的总值自然为0,如果是正常订单,总值自然为>0 “总额”字段采用十进制格式 这就是我目前正在努力做的事情 COUNT(gross) as 'TotalOrders', COUNT(case when gross = 0.00 THEN null else gross end) as 'OrderCount', COUNT(case wh

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

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

  • 订单总数
  • 可销售订单的订单计数
  • 仅包含免费样品的订单计数
  • 如果订单仅包含免费样品,则该订单的总值自然为
    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',
    
    如果订单具有正的
    gross
    值,如何使
    COUNT()
    函数仅增加1

    我正在
    SQLServer中执行此操作

    我的结果显示,
    TotalOrders
    1
    ,但是
    OrderCount
    Samples
    显示为
    0

    谢谢。

    这就是你想要的吗

    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
    将与
    样本相同
    将样本(计数(当总量>0.00=然后1个值为空时)转换为int)作为样本

    您建议的公式应该有效

    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
    

    求和而不是计数:
    Sum(当总量大于0.00时,则为1,否则为0结束)作为“OrderCount”,如果
    TotalOrders
    的值为1,并且
    OrderCount
    Samples
    的值为
    0
    ,则表明这一行的值为
    <0.00
    。这正是我想要的。我没有想到要用总和,因为我也在用它来计算那个时期的总毛额。您以一种巧妙的方式使用它,根据具体情况临时更改值。为答案干杯,但这似乎是一种非常复杂的方法。对于SQL来说,这是一个全新的问题,与下面的答案(已接受的答案)相比,它有什么优势?似乎使用select几次会产生负面的性能?我的“with Test…”是示例数据,向您展示您的计数方法确实检索到了预期值2