0

我有以下 SQL 代码 -

 select distinct opr,  
  CASE
          WHEN timestamp like '201302%' THEN ((SUM (charge / POWER (10, decimals)) OVER (PARTITION BY opr) * 1.15306))
          WHEN timestamp like '201303%' THEN ((SUM (charge / POWER (10, decimals)) OVER (PARTITION BY opr)* 1.14979))
          ELSE 0
       END as exr
  FROM in
group by opr, timestamp, (charge / POWER (10, decimals))

我希望收到价值 - 1080.104079

在此处输入图像描述

但是,它给了我两个值-

在此处输入图像描述

这个值 1079.459992 是得到的,因为 exr 已被扫描,这是错误的,因为 'Feb' 的费用应该乘以 'Feb' 的 exr

在此处输入图像描述

您能否帮我更正代码,以便我只能收到真实值,即 1080.104079。

4

1 回答 1

1

如果您只需要一个结果,您可以尝试将 CASE 逻辑移至 SUM 函数本身:

select opr,  
    SUM(CASE
          WHEN timestamp like '201302%' THEN ((charge / POWER (10, decimals)) * 1.15306)
          WHEN timestamp like '201303%' THEN ((charge / POWER (10, decimals)) * 1.14979)
          ELSE 0
       END)
       as exr
  FROM in
group by opr
having opr = 'DOM';

部分问题似乎是您按多列分组,但只选择一两列。如果您仅按 opr 列分组,则您应该只为“DOM”获得一行。

于 2013-10-07T21:21:11.753 回答