一个表为:用户资料表(账号,##,##)
,另一个表为用户购买物品的流水表(账号,金额,日期,##)
可是由于特殊原因,在用户资料表里同一个账号会有重复,
比如:会出现如下情况:
账号:
1
2
2
3
2
(2多次出现)流水表为:
账号,金额,日期,#
1,   200.00,20110101,
2,   300.30,20110102
3,   32.00,  20110403
3,   566.00, 20110403现在我想关联这两个表,并且关联的客户资料表要求是把那些重复的过滤为一条(比如把账号为2的过滤为只有一条然后再关联流水表)。如何关联?select * from 流水表 left join 用户资料表 on 用户资料表.账号=流水表.账号
这样关联会因为账号不是唯一的,所以会多出条数,所以如何能够让用户资料表中的那些多出的条数清出去?
不知我说明白了没,表达力差些,请见凉。

解决方案 »

  1.   

    select * 
    from (select distinct 帐号 from 流水表) as 流水表 
    left join 用户资料表 on 用户资料表.账号=流水表.账号
      

  2.   

    不过流水表表的数据应该也要分组统计以后再关联,否则也可能会出现一个帐号有多条记录的情况select * 
    from (select distinct 帐号 from 用户资料表) as 用户资料表 
    left join (select 帐号,sum(金额) as 金额 流水表 group by 帐号) as 流水表 
    on 用户资料表.账号=流水表.账号
      

  3.   


    这样?select * 
    from (select distinct 帐号 from 用户资料表) as 用户资料表 
    left join  流水表 
    on 用户资料表.账号=流水表.账号
      

  4.   

    select * 
    from (select distinct 帐号 from 用户资料表) as 用户资料表 
    left join (select 帐号,日期,sum(金额) as 金额 流水表 group by 帐号,日期) as 流水表 
    on 用户资料表.账号=流水表.账号
      

  5.   

    1.用DISTINCT去除重复记录,此方法只能处理账号相同其它字段也相同的重复记录
    2.用ROW_NUMBER() OVER(PARTION BY 账号 ORDER BY 账号) AS 行号,
    然后取行号=1的记录即可,此方法可以处理账号相同的记录,无论其它字段是否相同
      

  6.   


    select * 
    from (select *,row_number() over (partition by 账号 order by getdate()) cnt
          from 流水表)a
       left join 用户资料表 b on a.账号=b.账号
    where a.cnt = 1
      

  7.   

    select *  
    from (select distinct 帐号 from 用户资料表) as 用户资料表  
    left join (select 帐号,日期,sum(金额) as 金额 流水表 group by 帐号,日期) as 流水表  
    on 用户资料表.账号=流水表.账号