0
我有一些麻烦与此查询:但是查询不分组由什么我想
NODE_ID SUM(CVA.CVA) SUM(DVA.DVA) DEAL_NUMADM DEAL_NUMMAS
MA10700_1731413 953180 1373440 22012 10700
Master10700_1731413 4886330 4318999 0 10700
MA10700_1731413 1654 1192 12054 10700
MA10700_1731413 4 (null) 83442 10700
MA10700_1731413 14 1093 10775 10700
MA10700_1731413 963 (null) 10779 10700
,我希望将这些行由DEAL_NUMMAS
,所以:
select
case
when d.deal_numadm!=0 and d.deal_numadm is not null
then 'MA' || d.deal_nummas || '_' || d.ntt_id
when d.deal_numadm=0 or d.deal_numadm is null
then 'Master' || d.deal_nummas || '_' || d.ntt_id
end as node_id,
sum(cva.cva), sum(dva.dva), d.deal_numadm, d.deal_nummas
from acc_processed_cva cva
left outer join acc_processed_dva dva on dva.deal_id = cva.deal_id
join acc_deals d on d.deal_id = cva.deal_id and d.deal_scope='Y'
join dt_runs r on r.run_id = cva.run_id and r.deal_cnt_id = d.deal_cnt_id
where r.run_id=57 and d.deal_nummas=10700 and d.ntt_id = 1731413
group by d.ntt_id, d.deal_nummas, d.deal_numadm, d.deal_cnt_id, d.ntt_id;
它返回这些行我应该只有两排。
我试图消除在GROUP BY
表达d.deal_numadm
,但与此错误失败:
ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression"
澄清
以上,DEAL_NUMADM只存在表明他们是返回的每一行都不相同。
我想是这样的:
NODE_ID SUM(CVA.CVA) SUM(DVA.DVA) DEAL_NUMMAS
MA10700_1731413 955815 1375725 10700
Master10700_1731413 4886330 4318999 10700
与第一行是行1,3,4,5和6
我如何能实现我想要的结果的总和?
“DEAL_NUMMAS”中只有一个值,您为什么期望结果中有2行?也许你可以简单地在GROUP BY – dnoeth
中删除DEAL_NUMMAS时执行'min(DEAL_NUMMAS)'如果你在选择列表中有'deal_numadm',你也必须按照它的顺序进行分组,如你所见。如果你想为每个'ntt_id'和'deal_nummas'单独一行,那么你必须完全移除'deal_numadm',或者将5个值中的哪一个保留为一个聚合。如果不知道如何解决这个难题,不能真正建议改变。 –
根据您的预期结果看起来好像按node_id分组可以解决您的问题,并尝试从group by子句中删除其他人,除非d.deal_nummas(因为它是您的预期结果)非常必要,您可以在select中使用MAX函数。当你从group-by中删除它时,失败的原因是你需要将它们保留在聚合函数中,或者它们应该出现在group-by子句中。所以明智地计划。 – pushpraj