带有SUM的Oracle CASE语句

时间:2017-04-04 22:25:40

标签: sql oracle aggregate-functions

我在使用select语句

时无法返回正确的信息

表:

name1  | name2  | amount
------ | ------ | --------
Fred   | Fred   | 10
Bob    | Fred   | 15
Sam    | Sam    | 100

这是我的查询

SELECT 
        CASE WHEN name1 <> name2 THEN name2
        ELSE name1 END as name,
        SUM(amount) as amount
FROM table
GROUP BY???

我希望看到结果:

name  | amount
----- | ------
Fred  | 25
Sam   | 100

我尝试过使用group by并收到错误,说这不是GROUP BY表达式。如果我不使用组,则会收到错误,而不是单组组功能。这种查询是否可行?

2 个答案:

答案 0 :(得分:0)

GROUP BY子句必须评估与select子句相同的内容。这样做:

SELECT 
    CASE WHEN name1 <> name2 THEN name2 ELSE name1 END as calc_name,
    SUM(amount) as amount
FROM table
GROUP BY CASE WHEN name1 <> name2 THEN name2 ELSE name1 END 

此外,name是保留关键字,因此我稍微修改了该别名。

答案 1 :(得分:0)

尝试

SELECT ename,SUM(amount) amount FROM (
SELECT 
        CASE WHEN name1 <> name2 THEN name2
        ELSE name1 END as ename,
        amount
FROM table)
GROUP BY ename