简体   繁体   English

Oracle CASE语句和

[英]Oracle CASE STATEMENT WITH SUM

I'm having trouble return the correct information with my select statement 我在使用select语句返回正确的信息时遇到问题

table: 表:

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

Here is my query 这是我的查询

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

What I would like to see as a result: 结果,我希望看到的是:

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

I've tried using a group by and receive errors saying this is not a GROUP BY expression. 我尝试使用group by并收到错误消息,说这不是GROUP BY表达式。 If I don't use a group by I receive the error not a single-group group function. 如果我不使用分组,则会收到错误,而不是单组分组功能。 Is this type of query possible? 这种查询可能吗?

The GROUP BY clause has to evaluate to the same thing as your select clause did. GROUP BY子句的计算结果必须与select子句的计算结果相同。 Do this: 做这个:

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 

Also, name is a reserved keyword, so I modified that alias slightly. 另外, name是保留关键字,因此我对该别名做了一些修改。

Try as 尝试为

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM