declare @tb table
(
User_name varchar(10),
user_sex varchar(10)
)
declare @tb2 table
(
User_name varchar(10),
user_sex varchar(10)
)
insert @tb
select 'name1','男' union
select 'name2','女' union
select 'name3','男' union
select 'name4','女' insert @tb2
select 'name1','李路' union
select 'name1','李路2' union
select 'name2','张三' union
select 'name3','李四' union
select 'name4','王五'
select abc.User_name,abc.user_sex,tt.user_sex
from @tb abc inner join @tb2 tt on abc.User_name=tt.User_name
这是我建立的表跟查询,查询结果:
name1 男 李路
name1 男 李路2
name2 女 张三
name3 男 李四
name4 女 王五
我现在只想要@tb表中的内容,然后再加一列@tb2中的内容.如果表@tb2中有两行或多行name时,则查询结果也会出现多行name1,我只想取一行的.怎么操作.谢谢了.
(
User_name varchar(10),
user_sex varchar(10)
)
declare @tb2 table
(
User_name varchar(10),
user_sex varchar(10)
)
insert @tb
select 'name1','男' union
select 'name2','女' union
select 'name3','男' union
select 'name4','女' insert @tb2
select 'name1','李路' union
select 'name1','李路2' union
select 'name2','张三' union
select 'name3','李四' union
select 'name4','王五'
select abc.User_name,abc.user_sex,tt.user_sex
from @tb abc inner join @tb2 tt on abc.User_name=tt.User_name
这是我建立的表跟查询,查询结果:
name1 男 李路
name1 男 李路2
name2 女 张三
name3 男 李四
name4 女 王五
我现在只想要@tb表中的内容,然后再加一列@tb2中的内容.如果表@tb2中有两行或多行name时,则查询结果也会出现多行name1,我只想取一行的.怎么操作.谢谢了.
(
User_name varchar(10),
user_sex varchar(10)
)
declare @tb2 table
(
User_name varchar(10),
user_sex varchar(10)
)
insert @tb
select 'name1','男' union
select 'name2','女' union
select 'name3','男' union
select 'name4','女' insert @tb2
select 'name1','李路' union
select 'name1','李路2' union
select 'name2','张三' union
select 'name3','李四' union
select 'name4','王五' ;with t as
(
select rn=row_number() over(partition by abc.User_name order by getdate()),
abc.[User_name],abc.user_sex t1_user_sex,tt.user_sex t2_user_sex
from @tb abc inner join @tb2 tt on abc.User_name=tt.User_name
)
select case rn when 1 then [User_name] else '' end [User_name],
case rn when 1 then t1_user_sex else '' end t1_user_sex,
t2_user_sex
from t
/*
User_name t1_user_sex t2_user_sex
---------- ----------- -----------
name1 男 李路
李路2
name2 女 张三
name3 男 李四
name4 女 王五(5 行受影响)
*/
(
User_name varchar(10),
user_sex varchar(10)
)
declare @tb2 table
(
User_name varchar(10),
user_sex varchar(10)
)
insert @tb
select 'name1','男' union
select 'name2','女' union
select 'name3','男' union
select 'name4','女' insert @tb2
select 'name1','李路' union
select 'name1','李路2' union
select 'name2','张三' union
select 'name3','李四' union
select 'name4','王五' select a.User_name,a.user_sex,b.s
from @tb a inner join (select User_name,max(user_sex) as s from @tb2 group by User_name)b on a.User_name=b.User_name
--name1 男 李路2
--name2 女 张三
--name3 男 李四
--name4 女 王五
--楼主的要求
SELECT T.[USER_NAME],T.USER_SEX,MIN(T2.USER_SEX) AS USER_SEX
FROM @TB T, @TB2 T2
WHERE T.[USER_NAME] = T2.[USER_NAME]
GROUP BY T.[USER_NAME],T.USER_SEX /* 结果
name1 男 李路
name2 女 张三
name3 男 李四
name4 女 王五
*/
from @tb abc
inner join
(select User_Name, min(User_Sex) as User_Sex
from @tb2
group by User_Name
) as tt
on abc.User_name = tt.User_name
-- 返回结果集User_name user_sex user_sex
---------- ---------- ----------
name1 男 李路
name2 女 张三
name3 男 李四
name4 女 王五
from @tb abc inner join (SELECT [User_name],min(user_sex) user_sex from @tb2 group by [User_name])tt
on abc.User_name=tt.User_name
---------- ---------- ----------
name1 男 李路
name2 女 张三
name3 男 李四
name4 女 王五
select abc.User_name,abc.user_sex,min(tt.user_sex) as user_sex
from @tb abc inner join @tb2 tt on abc.User_name=tt.User_name GROUP BY abc.User_name,abc.user_sex
結果:
User_name user_sex user_sex
name1 男 李路
name2 女 张三
name3 男 李四
name4 女 王五