Oracle在2个表查询中只选择一个非重复项
Posted
技术标签:
【中文标题】Oracle在2个表查询中只选择一个非重复项【英文标题】:Oracle select only one non duplicates in 2 tables query 【发布时间】:2019-09-24 16:33:51 【问题描述】:我有两张桌子
a) 在 col1 唯一值上规范化表
col1 col2 col3 col4 col5
10 j u c z
20 r y b k
b) 表有多个 col1 的值来自 a
col1 col2 col3 col4 col5
10 l m k j
10 3 4 5 7
10 b v c b
20 a s d c
当我运行查询时,我的结果显示表 b 中的多个条目。我需要按 col1 分组,但分组显示消息 ORA-00979: not a GROUP BY expression
Select cec.CLAIMNUM , cec.CLAIMNUM, cec.CLAIMID, cec.PROVIDERID, cec.PHYSICIANNAME,cec.PATIENTID ,cec.PATIENTFIRSTNAME || ' '||cec.PATIENTLASTNAME , cec.TOTALCHARGES ,
(Select Sum(TO_NUMBER (VALUESTRING)) from PRICINGMSGS pr where pr.CLAIMNUM = cec.CLAIMNUM and errorcode = 610000) as UCR,
(SELECT Sum(SUBSTR(VALUESTRING, INSTR(VALUESTRING, '|')+1 ) )
FROM PRICINGMSGS p where p.CLAIMNUM =cec.CLAIMNUM and errorcode = 610001)AS Medicare
from CECLAIMS cec ,PRICINGMSGS price where
cec.CLAIMNUM = price.CLAIMNUM and
cec.ACCTNUMBER = price.ACCTNUMBER and
cec.ACCTNUMBER ='TEST0001'
group by cec.CLAIMNUM
【问题讨论】:
抱歉,我在搜索中输入了查询 您必须提及分组中的所有列名...请参阅此链接oracletutorial.com/?s=group+by 提供预期的输出,您是否需要在 Col1 上分组并需要表 2 中的所有列 【参考方案1】:在您的查询中,您在 select 子句中使用了 cec.claimnum
以外的列(在 group by
中)。
记住一条规则,如果您在查询中使用group by
,那么您只能在select
中使用group by
的子句中直接使用columns
。所有其他列必须与aggregate
函数一起使用。
SELECT COL1,
COL2,
AGGREGATE_FUNCTION(COL3) AS COL3,
...
FROM YOUR TABLE
GROUP BY COL1, COL2
干杯!!
【讨论】:
以上是关于Oracle在2个表查询中只选择一个非重复项的主要内容,如果未能解决你的问题,请参考以下文章
删除左表上的重复项,同时在右表SELECT JOIN上保留重复项
如何从Oracle SQL中的2个表中提取每个ID的最新记录[重复]