sql - 如何使用 where 子句中的子查询修复 Oracle“不是 GROUP BY 表达式”错误
问题描述
当我在 where 子句中添加子查询条件时,我有以下查询中断。如果我放置一个文本值,它会起作用,如果我删除子查询条件它会起作用。
子查询自行工作并返回单个值。我尝试先创建一个 CTE,重新排列查询,当我添加特定条件时它总是会中断。
得到 ORA-00979: not a GROUP BY 表达式的原因可能是什么?
SELECT ST.SECURITY_CODE "ID"
,SM.PORTFOLIO_CLASS "Main_Type"
,ST.MATURITY_DATE "Maturity_Date"
,SUM(CASE
WHEN ST.CUST_TRANS_CODE = 'SEL'
THEN TO_NUMBER(ST.BR_NO_NOM) * - 1
ELSE TO_NUMBER(ST.BR_NO_NOM)
END) "Balance1"
,ST.BR_ACC_NO "Nostro_Account"
,ST.CU_ACCOUNT_CCY "Currency_Code"
FROM v_FBNK_SEC_TRADE ST
LEFT JOIN v_F_SECURITY_MASTER SM ON ST.SECURITY_CODE = SM.SECURITY_CODE
WHERE ST.CUSTOMER_NO = '999999'
AND ST.BR_NO_NOM IS NOT NULL
AND TO_NUMBER(ST.BR_NO_NOM) > 0
AND ST.MATURITY_DATE < (
SELECT TODAY
FROM v_F_DATES
WHERE RECID = 'TT0010001'
)
GROUP BY ST.SECURITY_CODE
,SM.PORTFOLIO_CLASS
,ST.MATURITY_DATE
,ST.BR_ACC_NO
,ST.CU_ACCOUNT_CCY
解决方案
这将起作用:
SELECT ST.SECURITY_CODE "ID"
,SM.PORTFOLIO_CLASS "Main_Type"
,ST.MATURITY_DATE "Maturity_Date"
,SUM(CASE
WHEN ST.CUST_TRANS_CODE = 'SEL'
THEN TO_NUMBER(ST.BR_NO_NOM) * - 1
ELSE TO_NUMBER(ST.BR_NO_NOM)
END) "Balance1"
,ST.BR_ACC_NO "Nostro_Account"
,ST.CU_ACCOUNT_CCY "Currency_Code"
FROM v_FBNK_SEC_TRADE ST
LEFT JOIN v_F_SECURITY_MASTER SM ON ST.SECURITY_CODE = SM.SECURITY_CODE
WHERE ST.CUSTOMER_NO = '999999'
AND ST.BR_NO_NOM IS NOT NULL
AND TO_NUMBER(ST.BR_NO_NOM) > 0
AND ST.MATURITY_DATE < (
SELECT TODAY
FROM v_F_DATES
WHERE RECID = 'TT0010001'
)
GROUP BY ST.SECURITY_CODE
,SM.PORTFOLIO_CLASS
,ST.MATURITY_DATE
,TO_NUMBER(ST.BR_NO_NOM)
,ST.BR_ACC_NO
,ST.CU_ACCOUNT_CCY
推荐阅读
- excel - VBA 自定义保存
- android - Android Camera2 光学防抖
- r - 在 for 循环中剪切数字变量
- electron - 电子构建“不允许加载本地资源”但文件存在
- php - 我无法使用嵌入 url 预填充 HTML 表单
- java - 如何使用一种方法的文件返回到同一类的另一个方法中
- mysql - 有人可以帮助解决以下 mysql 语法错误吗
- python - Python 类:覆盖 `self`
- r - reprex 找不到 ref() 函数
- python-3.x - 如何通过添加参数('excludeSwitches',['enable-automation'])使带有 geckodriver 的 selenium python 在 Firefox 上无法检测到?