sql查询去重复问题,急急急,在线求大神帮忙啊。

li_shiwei 2014-05-22 01:01:39


SELECT t.CP_Name as stype,h.CP_Name as sindu,sum(isnull(c.CT_ConMoney,0)) as samount,
isnull(sum(g.CG_GathingMoney),0) as spay
FROM CommonParameter t
Left join FlyPM_Contract c on c.CT_ConClassify=t.CP_ID and c.CT_ConStatus <> 'CP1108191039380001'
and c.ct_consigndate between '2001-1-1' and '2014-12-12'
LEFT JOIN CommonParameter h on c.CT_ConType = h.CP_ID
LEFT JOIN flypm_contractGathering g on c.ct_id=g.ct_id
WHERE t.CPC_ID = 'CPC110409084846000139'
group by t.CP_Name,h.CP_Name,t.CP_Index,g.CG_GathingMoney
ORDER BY t.CP_Index,t.CP_Name




根据stype和sindu来去重复,就是3个samount=123的重复,值保留一个。这个怎么弄,求大神帮忙啊。在线等
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdashewan 2014-05-22
  • 打赏
  • 举报
回复
引用 12 楼 u011212968 的回复:
引用 11 楼 tangulao6575 的回复:
用distinct去除重复
在那里用?帮我在那个sql语句上写下。谢谢。
别考虑distinct你这问题不是简单distinct能解决的,自己改下sql,先按ct_id对flypm_contractGathering进行集计,再用集计的子查询去替代原来的flypm_contractGathering做左联
li_shiwei 2014-05-22
  • 打赏
  • 举报
回复
引用 11 楼 tangulao6575 的回复:
用distinct去除重复
在那里用?帮我在那个sql语句上写下。谢谢。
tangulao6575 2014-05-22
  • 打赏
  • 举报
回复
用distinct去除重复
xdashewan 2014-05-22
  • 打赏
  • 举报
回复
先按ct_id对flypm_contractGathering进行集计,再用集计的子查询去替代原来的flypm_contractGathering做左联
laowan688 2014-05-22
  • 打赏
  • 举报
回复
建议你用临时表吧, 别写一起了,太乱。
li_shiwei 2014-05-22
  • 打赏
  • 举报
回复
引用 7 楼 laowan688 的回复:
SUM 简单解决这个问题。
怎么解决?
laowan688 2014-05-22
  • 打赏
  • 举报
回复
SUM 简单解决这个问题。
li_shiwei 2014-05-22
  • 打赏
  • 举报
回复
引用 5 楼 xdashewan 的回复:
[quote=引用 2 楼 u011212968 的回复:] 这3条数据是同一条数据,spay是另一个表的关联过去的。
你源数据也不给下,你哪张表会连出3条数据说下[/quote] 合同表FlyPM_Contract中有合同额CT_ConMoney为123万元, 合同收费表flypm_contractGathering有关于123万元的3条收费记录,分别是100,20,3. 所以在sum(CT_ConMoney)时会多加1232次。这个怎么解决?
xdashewan 2014-05-22
  • 打赏
  • 举报
回复
引用 2 楼 u011212968 的回复:
这3条数据是同一条数据,spay是另一个表的关联过去的。
你源数据也不给下,你哪张表会连出3条数据说下
發糞塗牆 2014-05-22
  • 打赏
  • 举报
回复
max、sum这些都可以去掉,具体看你的需求
li_shiwei 2014-05-22
  • 打赏
  • 举报
回复

SELECT t.CP_Name as stype,h.CP_Name as sindu,sum(isnull(c.CT_ConMoney,0)) as samount,
isnull(sum(g.CG_GathingMoney),0) as spay
FROM CommonParameter t
Left join FlyPM_Contract c on c.CT_ConClassify=t.CP_ID and c.CT_ConStatus <> 'CP1108191039380001'
and c.ct_consigndate between '2001-1-1' and '2014-12-12'
LEFT JOIN CommonParameter h on c.CT_ConType = h.CP_ID
LEFT JOIN flypm_contractGathering g on c.ct_id=g.ct_id
WHERE t.CPC_ID = 'CPC110409084846000139'
group by t.CP_Name,h.CP_Name,t.CP_Index
ORDER BY t.CP_Index,t.CP_Name


最后的结果就是想去掉samount多加的两个123

li_shiwei 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
你没发现那3个123的spay不一样吗?这字段你不要了?


之前是group by 里没有g.CG_GathingMoney,但是samount的那个123相加里3次,把group by 里g.CG_GathingMoney去掉怎么修改让其123不重复相加,因为
这3条数据是同一条数据,spay是另一个表的关联过去的。
xdashewan 2014-05-22
  • 打赏
  • 举报
回复
你没发现那3个123的spay不一样吗?这字段你不要了?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧