日期:2014-05-18  浏览次数:20503 次

sql合并数据
C# code

CustomerID ChName    Mobile    Address CardID LinkMan LinkMobile  CreateDate 
120612001  王小二     NULL      NULL   000781  NULL     NULL       2011-12-3 
120612002  XXXX公司 13656778787 Null   000781  NULL   13566677981  2010-9-10
120612003  yyyy公司   Null      上海   000781  王斯   13466677881       NULL 
120612004  zzzz公司 13466677881 北京   000781  NULL     NULL       2011-9-10 
120612005  李雷       Null      上海   000782  张三   13466677882       NULL 
120612006  GGGG公司 13466677882 广州   000782  NULL     NULL            NUll 
120612007  张兵       Null      上海   000783  Jim    13466677883       NULL 
120612008  张兵     13466677885 NULL   000783  NULL     NULL       2010-9-1 
120612009  张兵     13466677886 天津   000783  NULL   13866654566       NULL 

条件:1.CardID唯一 
            2.CardID相同记录中,如果其中存在CreateDate不为空,那么保留距今天最近的一条; 
                如果CardID相同记录中CreateDate都为空则包里Mobile不为空的数据   
            3.保留的记录中,如果这条记录中字段为空那么取CardID相同记录中其他不为空的数据, 
                如果其中存在多条不为空的记录,取值也是按CreateDate距今最近的不为空的值   
                或   Mobile   不为空的一条中不为空的值 
            
希望通过sql语句整理后得到结果如下: 
CustomerID  ChName     Mobile   Address CardID LinkMan LinkMobile  CreateDate 
120612001  王小二   13466677881  北京   000781  王斯   13566677981 2011-12-3 
120612006  GGGG公司 13466677882  广州   000782  张三   13466677882      NUll 
120612008  张兵     13466677885  天津   000783  Jim    13866654566  2010-9-1 



------解决方案--------------------
明白楼主的意思了。
------解决方案--------------------


从这个数据来看,估计除了customerid,chname,cardid之后,其它的字段均要判断一下null及最近createdate的情况。
------解决方案--------------------
如果CreateDate为空呢?
------解决方案--------------------
这设计得。这东西弄出来性能都不行。
------解决方案--------------------
提供下数据,呵呵
SQL code

declare @T table 
(
    CustomerID int,ChName varchar(8),Mobile bigint,
    Address varchar(4),CardID varchar(6),LinkMan varchar(4),
    LinkMobile bigint,CreateDate datetime
)
insert into @T
select 120612001,'王小二',null,null,'000781',null,null,'2011-12-3' union all
select 120612002,'XXXX公司',13656778787,null,'000781',null,13566677981,'2010-9-10' union all
select 120612003,'yyyy公司',null,'上海','000781','王斯',13466677881,null union all
select 120612004,'zzzz公司',13466677881,'北京','000781',null,null,'2011-9-10' union all
select 120612005,'李雷',null,'上海','000782','张三',13466677882,null union all
select 120612006,'GGGG公司',13466677882,'广州','000782',null,null,null union all
select 120612007,'张兵',null,'上海','000783','Jim',13466677883,null union all
select 120612008,'张兵',13466677885,null,'000783',null,null,'2010-9-1' union all
select 120612009,'张兵',13466677886,'天津','000783',null,13866654566,null

select * from @T

------解决方案--------------------
SQL code

declare @T table 
(
    CustomerID int,ChName varchar(8),Mobile bigint,
    Address varchar(4),CardID varchar(6),LinkMan varchar(4),
    LinkMobile bigint,CreateDate datetime
)
insert into @T
select 120612001,'王小二',null,null,'000781',null,null,'2011-12-3' union all
select 120612002,'XXXX公司',13656778787,null,'000781',null,13566677981,'2010-9-10' union all
select 120612003,'yyyy公司',null,'上海','000781','王斯',13466677881,null union all
select 120612004,'zzzz公司',13466677881,'北京','000781',null,null,'2011-9-10' union all
select 120612005,'李雷',null,'上海','000782','张三',13466677882,null union all
select 120612006,'GGGG公司',13466677882,'广州','000782',null,null,null union all
select 120612007,'张兵',null,'上海','000783','Jim',13466677883,null union all
select 120612008,'张兵',13466677885,null,'000783',null,null,'2010-9-1' union all
select 120612009,'张兵',13466677886,'天津','000783',null,13866654566,null

select 
(select top 1 CustomerID from @T where