首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求个SQL语句,非常感谢

2013-12-20 
求个SQL语句,十分感谢!我现在系统中需要用到一个SQL语句,没有办法使用存储过程,只能用SQL实现,想得到如下

求个SQL语句,十分感谢!
我现在系统中需要用到一个SQL语句,没有办法使用存储过程,只能用SQL实现,想得到如下效果:
如果table1中有如下Col1,Col2两列,table2中有Col1,Col3两列。数据如下:
table1:
Col1   Col2
0001   3
0002   4
0002   5

table2:
Col1    Col3
0002    6

直接用leftjoin话得到的结果如下:
Col1   Col2    Col3
0001   3       
0002   4       6
0002   5       6

但是我想实现这种效果:
Col1   Col2    Col3
0001   3       
0002   4       6
0002   5       
就是左连接如果Col1数据重复,只是连接到第一列,重复的就变成空。
这样的sql该如何写啊?求助。
[解决办法]

create table table1(Col1 varchar(10),  Col2 int)

insert into table1
select '0001',   3 union all
select '0002',   4 union all
select '0002',   5

create table table2(Col1 varchar(10),   Col3 int)

insert into table2
select '0002',    6
go

select t1.Col1,t1.Col2,
       case when row_number() over(PARTITION by t1.col1 
                                       order by @@servername)=1
                 then t2.Col3
            else null
       end as col3
from table1 t1
left join table2 t2
       on t1.Col1 = t2.Col1
/*
Col1Col2col3
00013NULL
000246
00025NULL
*/

[解决办法]
table1 左连接 select a.*,b.Col2 from table2 a ,(select Col1 , min(Col2) as Col2  from table2 group by Col1  ) where a.Col1    =b.Col1    

热点排行