ORACLE中sql语句中同时使用decode与聚合函数时的注意事项

本文详细阐述了在Oracle数据库中如何正确使用decode函数与聚合函数进行查询,特别强调了必须在GROUP BY语句中包含所有非聚合函数,以及关于逗号使用和decode函数全称的重要性,以避免ORACLE错误。
摘要由CSDN通过智能技术生成

Oracle数据库中同时使用decode与聚合函数的注意事项

1. sql语句必须使用group by语句,并且将select中的查询列表中时项都必须有(聚合函数除外),否则报 > ORA-00979: 不是 GROUP BY 表达式 的错误!!!同时注意逗号,多逗号会出现 > ORA-00936: 缺失表达式 的错误!!! 少逗号会出现 > ORA-00933: SQL 命令未正确结束 的错误

示例1:未列全查询列表

	SELECT
		DECODE(U.ID, NULL, Z.ZTNAME, D.DEPARTMENTNAME) ZTNAME,
		Z.YEARV YEARV,
		Z.KMCODE KMCODE,
		Z.KMNAME KMNAME,
		DECODE(U.ID, NULL, Z.ZTCODE, D.EXT4) ZTCODE,
		DECODE(Z.ZTTYPE, '人员档案','部门档案', Z.ZTTYPE) ZTTYPE,
		SUM(Z.YSAMOUNT) YSAMOUNT,
		SUM(Z.ZFWC) ZFWC,
		SUM(Z.BDGCOMP) BDGCOMP,
		SUM(Z.NEWZFWC) NEWZFWC,
		SUM(Z.NEWBDGCOMP) NEWBDGCOMP,
		SUM(Z.TOT) TOT,
		SUM(Z.MEABDGCOMP) MEABDGCOMP,
		SUM(Z.BALANCE) BALANCE,
		SUM(Z.ZFZT) ZFZT,
		SUM(Z.NEWZFZT) NEWZFZT,
		MAX(Z.DEPARTMENTNAME) DEPARTMENTNAME,
		MAX(Z.DEPTMGR) DEPTMGR,
		MAX(Z.DEPTMGRID) DEPTMGRID
	FROM
		VIEW_ACT_CSTBDGT_MONITOR_T Z
		LEFT JOIN ORGUSER U ON Z.ZTNAME = U.USERNAME
		LEFT JOIN ORGDEPARTMENT D ON U.DEPARTMENTID = D.ID
	GROUP BY 		
		Z.YEARV,
		Z.KMCODE,
		Z.KMNAME
		

 报错:

> ORA-00979: 不是 GROUP BY 表达式

> 时间: 0.02s

示例二:列全查询列表了,但是使用的是DECODE的简称!!这时也会报错 > ORA-00979: 不是 GROUP BY 表达式

	SELECT
		DECODE(U.ID, NULL, Z.ZTNAME, D.DEPARTMENTNAME) ZTNAME,
		Z.YEARV YEARV,
		Z.KMCODE KMCODE,
		Z.KMNAME KMNAME,
		DECODE(U.ID, NULL, Z.ZTCODE, D.EXT4) ZTCODE,
		DECODE(Z.ZTTYPE, '人员档案','部门档案', Z.ZTTYPE) ZTTYPE,
		SUM(Z.YSAMOUNT) YSAMOUNT,
		SUM(Z.ZFWC) ZFWC,
		SUM(Z.BDGCOMP) BDGCOMP,
		SUM(Z.NEWZFWC) NEWZFWC,
		SUM(Z.NEWBDGCOMP) NEWBDGCOMP,
		SUM(Z.TOT) TOT,
		SUM(Z.MEABDGCOMP) MEABDGCOMP,
		SUM(Z.BALANCE) BALANCE,
		SUM(Z.ZFZT) ZFZT,
		SUM(Z.NEWZFZT) NEWZFZT,
		MAX(Z.DEPARTMENTNAME) DEPARTMENTNAME,
		MAX(Z.DEPTMGR) DEPTMGR,
		MAX(Z.DEPTMGRID) DEPTMGRID
	FROM
		VIEW_ACT_CSTBDGT_MONITOR_T Z
		LEFT JOIN ORGUSER U ON Z.ZTNAME = U.USERNAME
		LEFT JOIN ORGDEPARTMENT D ON U.DEPARTMENTID = D.ID
	GROUP BY 
		ZTNAME,
		Z.YEARV,
		Z.KMCODE,
		Z.KMNAME,
		ZTCODE,
		ZTTYPE

报错:

> ORA-00979: 不是 GROUP BY 表达式

> 时间: 0.02s

这是因为Oracle中不认decode函数的简称,必须写全,故正确语句为:

	SELECT
		DECODE(U.ID, NULL, Z.ZTNAME, D.DEPARTMENTNAME) ZTNAME,
		Z.YEARV YEARV,
		Z.KMCODE KMCODE,
		Z.KMNAME KMNAME,
		DECODE(U.ID, NULL, Z.ZTCODE, D.EXT4) ZTCODE,
		DECODE(Z.ZTTYPE, '人员档案','部门档案', Z.ZTTYPE) ZTTYPE,
		SUM(Z.YSAMOUNT) YSAMOUNT,
		SUM(Z.ZFWC) ZFWC,
		SUM(Z.BDGCOMP) BDGCOMP,
		SUM(Z.NEWZFWC) NEWZFWC,
		SUM(Z.NEWBDGCOMP) NEWBDGCOMP,
		SUM(Z.TOT) TOT,
		SUM(Z.MEABDGCOMP) MEABDGCOMP,
		SUM(Z.BALANCE) BALANCE,
		SUM(Z.ZFZT) ZFZT,
		SUM(Z.NEWZFZT) NEWZFZT,
		MAX(Z.DEPARTMENTNAME) DEPARTMENTNAME,
		MAX(Z.DEPTMGR) DEPTMGR,
		MAX(Z.DEPTMGRID) DEPTMGRID
	FROM
		VIEW_ACT_CSTBDGT_MONITOR_T Z
		LEFT JOIN ORGUSER U ON Z.ZTNAME = U.USERNAME
		LEFT JOIN ORGDEPARTMENT D ON U.DEPARTMENTID = D.ID
	GROUP BY 
		DECODE(U.ID, NULL, Z.ZTNAME, D.DEPARTMENTNAME),
		Z.YEARV,
		Z.KMCODE,
		Z.KMNAME,
		DECODE(U.ID, NULL, Z.ZTCODE, D.EXT4)
		DECODE(Z.ZTTYPE, '人员档案','部门档案', Z.ZTTYPE)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值