【问题标题】:CASE statement based on SUM results in query基于 SUM 的 CASE 语句导致查询
【发布时间】:2014-01-09 19:51:51
【问题描述】:

我有一个查询,我正在使用 SUM 来汇总账单明细值。我想创建一个CASE 语句来处理该总和的结果,而不是求和的值。下面是我的查询当前的部分示例。

SELECT 
    bill.billnumber_id, 
    billdetail.billclass, 
    SUM(billdetail.amount) AS Amount
GROUP BY bill.billnumber_id, billdetail.billclass

假设这总共有 4 行 billdetail (2, 0, 5, 3),总和为 10。我想根据 10 的数量而不是单个值来做 CASE 语句。谢谢。

【问题讨论】:

  • 您想用CASE 语句做什么
  • 感谢大家的帮助。我尝试了前两个回复,它们都有效。甚至感谢 Laf 让我的帖子看起来更好。我仍在尝试弄清楚如何正确发布我的代码。

标签: sql sql-server-2008 reporting-services


【解决方案1】:

这是你想要的吗?

SELECT bill.billnumber_id, billdetail.billclass, SUM(billdetail.amount) AS Amount,
       (case when SUM(billdetail.amount) > 10 then 'BigOne'
             else 'Little'
        end)
GROUP BY bill.billnumber_id, billdetail.billclass

【讨论】:

    【解决方案2】:

    您需要使用子查询:

    SELECT CASE WHEN Amount = 0 THEN 'Nothing' ELSE 'somthing' END AmountComment
    FROM(
      SELECT bill.billnumber_id, billdetail.billclass, SUM(billdetail.amount) AS Amount
      GROUP BY bill.billnumber_id, billdetail.billclass
    )x
    

    【讨论】:

      【解决方案3】:
      SELECT bill.billnumber_id, billdetail.billclass, (Select SUM(billdetail.amount) from billdetail)
      AS Amount
      from bill inner join billdetail on bill.id = buildetail.kBillId 
      /* include from join (not added above)*/
      GROUP BY bill.billnumber_id, billdetail.billclass
      

      我相信这就是你所追求的......你可能想在你的内部选择语句中包含相同的 from 结构:

       SELECT bill.billnumber_id, billdetail.billclass, (Select SUM(billdetail.amount) from bill inner
      join billdetail on bill.id = buildetail.kBillId ) AS Amount
      from bill inner join billdetail on bill.id = buildetail.kBillId 
      /* include from join (not added above)*/
      GROUP BY bill.billnumber_id, billdetail.billclass
      

      如果你是这个意思,请告诉我。

      【讨论】:

        【解决方案4】:

        您可以将其设为子查询:

        SELECT billnumber_id, billclass, CASE WHEN Amount = 10 THEN ... ELSE ... END
        FROM
        (
          SELECT bill.billnumber_id, billdetail.billclass, SUM(billdetail.amount) AS Amount
          GROUP BY bill.billnumber_id, billdetail.billclass
        ) A
        

        或者只是重复聚合:

        SELECT bill.billnumber_id, billdetail.billclass, SUM(billdetail.amount) AS Amount
             , CASE WHEN SUM(billdetail.amount) = 10 THEN ... ELSE ... END
        GROUP BY bill.billnumber_id, billdetail.billclass
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多