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个表查询中只选择一个非重复项的主要内容,如果未能解决你的问题,请参考以下文章

更新在 Oracle 中不起作用,2 个表 [重复]

删除左表上的重复项,同时在右表SELECT JOIN上保留重复项

仅使用一个 SQL 请求在 2 个表中进行选择 [重复]

如何从Oracle SQL中的2个表中提取每个ID的最新记录[重复]

一个奇怪的 Oracle SQL,它来自 3 个表,但在 where 子句中只留下了 join 2?

sql 查询 - 在 12 小时内选择重复项