【问题标题】:Group By with Case Statements SQL Server使用案例语句 SQL Server 分组依据
【发布时间】:2020-01-28 05:44:45
【问题描述】:

我想用 SQL Server 中的 case 语句进行分组。我创建的案例是我的收入范围。我想计算所有这些收入范围内的销售订单数量(案例)

请在下面找到我的疑问:

Select 
    sum(OrderQuantity) as Orders,
    case when (sum(SalesAmount-TaxAmt-Freight)<100 and sum(SalesAmount-TaxAmt-Freight)>=0) then '$0-$100'
       when (sum(SalesAmount-TaxAmt-Freight)>=100 and sum(SalesAmount-TaxAmt-Freight)<500) then '$100-$500'
       when (sum(SalesAmount-TaxAmt-Freight)>=500 and sum(SalesAmount-TaxAmt-Freight)<1000) then '$500-$1000'
       when (sum(SalesAmount-TaxAmt-Freight)>=1000 and sum(SalesAmount-TaxAmt-Freight)<2500) then '$1000-$2500'
       when (sum(SalesAmount-TaxAmt-Freight)>=2500 and sum(SalesAmount-TaxAmt-Freight)<5000) then '$2500-$5000'
       when (sum(SalesAmount-TaxAmt-Freight)>=5000 and sum(SalesAmount-TaxAmt-Freight)<10000) then '$5000-$10000'
       when (sum(SalesAmount-TaxAmt-Freight)>=10000 and sum(SalesAmount-TaxAmt-Freight)<50000) then '$10000-$50000'
       when (sum(SalesAmount-TaxAmt-Freight)>=50000 and sum(SalesAmount-TaxAmt-Freight)<100000) then '$50000-$100000'
       when (sum(SalesAmount-TaxAmt-Freight)>=100000) then '>$100000'
    end as SalesAmountCategory
From  
    dbo.FactResellerSales 
group by 
    SalesAmountCategory;

我希望得到如下结果:

result example

当我尝试根据案例陈述进行分组时,我不断收到错误消息。错误是“列名 'SalesAmountCategory' 无效”。我怎样才能做到这一点?提前谢谢了!

【问题讨论】:

  • 错误是什么?
  • 错误信息是 Invalid column name 'SalesAmountCategory'。
  • 感谢您的错误信息。您不需要 GROUP BY 只需将其删除即可。 SalesAmountCategory 的别名是聚合公式的结果,因此不需要它作为分组依据。这类似于说 SELECT sum(sales) as sum_of_sales FROM some_table GROUP BY sum_of_sales; 充其量是多余的,最坏的情况是会引发错误(就像它在这里所做的那样)。
  • 您好,我需要使用按功能分组,因为我想根据我刚刚创建的案例对订单号进行排序。很抱歉造成混乱。

标签: sql case


【解决方案1】:

您似乎想知道每个类别中的订单数

因此,您需要先将每个订单映射到类别,然后按其分组,如下所示:

select SalesAmountCategory, count(*) from
(
    Select case
        when ((SalesAmount-TaxAmt-Freight)>=100000) then '>$100000'
        when ((SalesAmount-TaxAmt-Freight)>=50000) then '$50000-$100000'
        when ((SalesAmount-TaxAmt-Freight)>=10000) then '$10000-$50000'
        when ((SalesAmount-TaxAmt-Freight)>=5000) then '$5000-$10000'
        when ((SalesAmount-TaxAmt-Freight)>=2500) then '$2500-$5000'
        when ((SalesAmount-TaxAmt-Freight)>=1000) then '$1000-$2500'
        when ((SalesAmount-TaxAmt-Freight)>=500) then '$500-$1000'
        when ((SalesAmount-TaxAmt-Freight)>=100) then '$100-$500'
        when ((SalesAmount-TaxAmt-Freight)<100) then '$0-$100'
        end as SalesAmountCategory
    From  dbo.FactResellerSales 
) as t
group by SalesAmountCategory

【讨论】:

  • 您好,很抱歉给您带来了困惑。我想知道属于每个案例类别的总订单数。这就是我使用 sum 函数的原因。例如我想知道总共有多少订单属于“$100-$500”这个类别。
  • @vivianna 对,这就是这个查询的作用,要知道有多少订单——你需要count他们,而不是sum其中的产品数量
猜你喜欢
  • 2013-05-13
  • 2012-05-18
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多