2015-11-17 131 views
0

enter image description here只能选择一个记录,如果有记录

的某些相同的值在SQL的不止一个,我想所有的记录,但在列值RM发生MCCU twice..but我在的情况下,可以不显着,因为这两个值的杂项的值都不一样..

我怎么能做出是否MCCU有一个以上的RM,然后只选择那些在POSI列和处于较高位置的一个专栏,将他们的两个数值加起来组合在一起。希望想法解决它。非常感谢你!

这是我的SQL语句

select * from Oclaimc Where cono='NP' and CLNO='7150000032' 
+1

您可以编辑的问题,并添加想要的结果呢? (并标记使用的dbms ...) – jarlh

+0

@jarlh - 您可以通过附加图像进行假设。 – pedram

+0

@curiousguy,我不知道是什么工具... – jarlh

回答

1

没有列名misc在你的形象。我假设你需要总计gamntMiscgttlMisc

所以试试这个。需要时添加其他列。

select max(CONO) as CONO,max(CLNO) as CLNO,max(posi) as posi,MCCU, 
sum(gamntMisc) as totalgamntMisc,sum(gttlMisc) as totalgttlMisc from Oclaimc 
where cono='NP' and CLNO='7150000032' 
group by mccu 

注意:如果删除where子句,查询将失败。如果你需要这个结果对于conoclno每个组合则by子句改变组 group by cono,clno,mccu

+0

嗨..非常感谢你! 但我不是很明白,你能解释我,我欣赏它:) 1)cono和clno的最大功能意味着什么?因为当我谷歌最大功能,这意味着返回所选列的最大值。 2)为什么群由mccu是必要的?因为当我删除它时,查询无法运行。 真正赞赏。 – Jan

+0

所以这个查询是由'mccu'分组的,因为你有3个不同的值,这就是你在输出中需要的值。按函数分组最重要的规则是,select语句中的列应该是按照子句划分的,否则它们应该使用任何聚合函数。现在即使'conc'和'clno'值对于每一组'mccu'都是相同的,SQL将不知道它们是否是。因此,使用Max可以让我们按规则绕过组并获得所需的结果。 – Utsav

+0

你可以进一步谷歌'group by'并做一些案例研究来更好地理解它。 – Utsav

0

这可能会帮助:

select * 
    from oclaimc 
where cono = 'NP' 
    and clno = '7150000032' 
    and mccu <> 'RM' 

union 

select * 
    from (select * 
      from oclaimc 
     where cono = 'NP' 
      and clno = '7150000032' 
      and mccu = 'RM' 
     order by posi) 
where rownum = 1