【发布时间】:2018-11-22 18:10:17
【问题描述】:
当我尝试使用组函数条件和普通列条件创建案例表达式时遇到问题。
表:STG
+ --------+--------+------+----------+ | Ref_ID |实际 |付费 |原因 | + --------+--------+------+----------+ | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 0 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 0 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 0 | 480 |培训 | | H1 | 0 | 0 | | | H1 | 360 | 0 | | | H1 | 360 | 0 | | + --------+--------+------+----------+代码如下:
说明:如果每天的实际小时数超过 480,则需要将其视为 480。即。 8 小时/天 * 60 =480。 那么实际总和被延长1440然后需要从实际小时总和中扣除。
在同一个查询中,我必须将所有实际值与付费相加(如果原因是培训,则为付费小时)
SELECT
CASE WHEN (SUM(CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END))>1440 THEN
((SUM(CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END))-1440) ELSE 0
END SINGLE_RATE
FROM STG WHERE REF_ID='H1'
GROUP BY REF_ID;
我尝试修改如下:
SELECT
CASE WHEN (SUM(CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END)+(case when reason = 'training' then paid else 0 end ))>1440 THEN
((SUM(CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END)+(case when reason = 'training' then paid else 0 end ))-1440) ELSE 0
END SINGLE_RATE
FROM STG WHERE REF_ID='H1'
GROUP BY REF_ID;
但出现以下错误:
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
也尝试过:
SELECT
(sum ( (CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END) + case when reason = 'training' then paid else 0 end )-1440) SINGLE_RATE
FROM STG WHERE REF_ID='H1'
GROUP BY REF_ID
having sum ( (CASE WHEN (ACTUAL)>480 THEN 480 ELSE (ACTUAL) END) + case when reason = 'training' then paid else 0 end )>1440;
但paid 的金额没有得到计算。只添加了actual。
请提出您的建议。
【问题讨论】:
-
感谢您的快速回复 Namandeep..
-
编辑了我的问题。请帮帮我。
-
你有什么问题?你试图做什么,有什么问题?您可以在问题中包含您想要的结果;如果您的查询得到了错误的结果,您也可以将其包括在内,并解释其中的问题。
-
感谢 Alex 完美地编辑了我的问题。