0

我正在编写一个 sql 脚本,并且在 select 子句中有 2 条语句,格式如下: max(case when ... then ... end)

我想在这些 case 语句之后添加其他语句,但我收到一条错误消息:

Error at line 1 not a GROUP BY expression

这是我的脚本:

create table mydb.test1 as
select distinct substr(testdb.wtags.FAO, 1) as Account_Number,
       max(Case
       when testdb.wtags.descriptor like 'Company for%' then ('CM' || substr(testdb.wtags.DESCRIPTOR, 18)) end ) Division,

       max(Case
       when testdb.wtags.value like 'CC%' then substr(testdb.wtags.value, 1) end) Department,

-------------------------------
           'CM' || substr(testdb.wtags.DESCRIPTOR, 18, 22) as Division,
           substr(testdb.wtags.value, 1, 10) as Department,
           substr(testdb.MASTERFILE.Workday_Description, 1, 20) as Description,
           '                    ' Responsible_Person,
           '                    ' Address,
           ' ' Delete_Flag,
           ' ' Freeze_Flag
-----------------------

  from testdb.wtags
       join testdb.masterfile 
           on testdb.wtags.fao = testdb.MASTERFILE.workday_number
           --where testdb.wtags.descriptor like 'Company for%'
           --OR testdb.wtags.value like 'CC%'
           --order by Account_Number Desc
           group by testdb.wtags.fao;

我想在两条虚线之间添加语句,但这会导致错误。如果我删除这些语句,一切正常。我正在使用 Toad for Oracle。

4

2 回答 2

3

它本身与case 表达式无关。这是一个正在使用的查询GROUP BY- 因此SELECT列表中的所有内容都需要成为GROUP BY子句的一部分或需要在聚合函数内(例如,、、MINMAXSUM

您尝试引用的列都不符合这些条件。我不会建议应该以何种方式改变事物(添加GROUP BY或引入适当的聚合),因为我既没有你的数据,也没有你期望这个查询产生的结果。

错误消息可能更具描述性。

于 2013-10-29T13:40:43.227 回答
1

子句中的每个字段都SELECT必须用逗号分隔。后面没有逗号Department(第二case条语句的别名)。


当您创建聚合查询(具有GROUP BY子句的查询)时,子句中的每个字段都SELECT必须包含在聚合函数中(例如maxminavg等)或包含在GROUP BY子句中。看起来您有多个违反此规则的字段 ( Descriptor, value, )。Workday_Description


仅删除该GROUP BY子句是行不通的,因为没有它,您就不能使用聚合函数(即max)。

由于我们没有您的数据或不知道您想要达到的结果,因此我们无法告诉您如何专门修复您的查询。充其量,我们可以告诉您您的选择是什么。

于 2013-10-29T13:35:06.667 回答