我正在尝试执行 SQL 命令
select distinct T1.dbid,T1.id,T6.user_name,T6.action_name,T6.action_timestamp,T2.filename from promotion T1,history T6,attachments T2 where T1.dbid = T6.entity_dbid and 16777433 = T6.entitydef_id and T1.dbid = T2.entity_dbid (+) and 16777962 = T2.entity_fielddef_id (+) and (T1.dbid <> 0 and ((T6.action_name = 'Add-Comments-Attachments' and T6.action_timestamp between to_date('2021-03-24 00:00:00', 'YYYY-MM-DD HH24:MI:SS') and to_date('2022-03-23 23:59:59', 'YYYY-MM-DD HH24:MI:SS')))) group by T1.dbid order by T1.id ASC ,T6.action_timestamp ASC
这给了我ORA 00979
错误信息,我不知道该如何解决它。我尝试使用STRING_AGG(T1.id, ',')
asT1.id
等... 即每个变量(列),就像我在某处看到的那样,但还是徒劳无功。我希望得到的结果是将行数缩小到 1,这将把第 1 列中的行组合在一起(T1.id
)并在 1 行中列出每列的结果。有什么想法如何解决它?
答案1
据我所知,ORA-00979 的意思是“不是 GROUP BY 表达式”。
并且“group by”子句应该包含“select”子句中的所有表达式,但这不是您的情况。
我建议先修复这个问题。
来源 : http://www.dba-oracle.com/t_ora_00979_not_a_group_by_expression.htm
答案2
您必须将 SELECT 的所有列放入 GROUP BY 中。未包含在 GROUP BY 中的列必须使用组函数,以便它们可以给出单个值(COUNT、MIN、MAX、SUM、SVG)。
举个例子,下面是这个简单的数据库表:
FOO BAR
0 11
0 22
并执行命令:
SELECT * FROM table GROUP BY FOO
结果必须是单行。
现在我们知道第一列FOO
必须包含0
GROUP BY,但对于第二列,BAR
现在有两个值可供选择。您期望第二列的结果是 11 还是 22?
这可以通过为第二列分配一个组函数来解决,例如:
SELECT FOO, SUM(BAR) FROM table GROUP BY FOO
现在结果是一行,其值为“(0,33)”。