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

这两个表如何合并出想要的结果,最后50分全给了,

2012-01-02 
这两个表怎么合并出想要的结果,最后50分全给了,急!表1.Cards表2.UsersCardNoOwner(车主)User(使用者)IDNam

这两个表怎么合并出想要的结果,最后50分全给了,急!
表1.Cards                                                             表2.Users
CardNo   Owner(车主)   User(使用者)                 ID             Name
粤A101             1               2                                     1             麦迪
粤A102             4               3                                     2   姚明
粤A103             3               1                                     3       科比
                                                                              4   纳什

显示结果
车牌      身份    姓名
粤A101                     车主                 麦迪
粤A101                     使用者             姚明
粤A102                     车主                 纳什
粤A102                     使用者             科比
粤A103                     车主                 科比
粤A103                     使用者             麦迪

[解决办法]
Create Table Cards
(CardNoNvarchar(20),
OwnerInt,
[User]Int)

Create Table Users
(IDInt,
NameNvarchar(20))
Insert Cards Select N '粤A101 ', 1, 2
Union All Select N '粤A102 ', 4, 3
Union All Select N '粤A103 ', 3, 1

Insert Users Select 1, N '麦迪 '
Union All Select 2, N '姚明 '
Union All Select 3, N '科比 '
Union All Select 4, N '纳什 '
GO
Select
A.CardNo,
N '车主 ' As 身份,
B.Name As 姓名
From
Cards A
Inner Join
Users B
On A.Owner = B.ID
Union
Select
A.CardNo,
N '使用者 ' As 身份,
B.Name As 姓名
From
Cards A
Inner Join
Users B
On A.[User] = B.ID
Order By
CardNo, 身份 Desc
GO
Drop Table Cards, Users
--Result
/*
CardNo身份姓名
粤A101车主麦迪
粤A101使用者姚明
粤A102车主纳什
粤A102使用者科比
粤A103车主科比
粤A103使用者麦迪
*/

[解决办法]
select 车牌,身份,B.Name 姓名 from(
select CardNo 车牌, '车主 ' 身份,Owner nameid from Cards
union select CardNo , '使用者 ',[User] from Cards


)A left join #Users B on A.nameid=B.id
order by 车牌,身份
车牌 身份 姓名
---------- ------ ----------
粤A101 车主 麦迪
粤A101 使用者 姚明
粤A102 车主 纳什
粤A102 使用者 科比
粤A103 车主 科比
粤A103 使用者 麦迪

(所影响的行数为 6 行)
[解决办法]
create table Cards(CardNo varchar(10),Owner int,[User] int)
insert into Cards values( '粤A101 ',1,2)
insert into Cards values( '粤A102 ',4,3)
insert into Cards values( '粤A103 ',3,1)
go

create table Users(ID int,Name varchar(10))
insert into Users values(1, '麦迪 ')
insert into Users values(2, '姚明 ')
insert into Users values(3, '科比 ')
insert into Users values(4, '纳什 ')
go

select * from
(
select a.CardNo 车牌, 身份 = '车主 ' , b.name 姓名 from Cards a , Users b where a.Owner = b.id
union all
select a.CardNo 车牌, 身份 = '使用者 ' , b.name 姓名 from Cards a , Users b where a.[user] = b.id
) t
order by 车牌 , 身份

drop table Cards,Users

/*
车牌 身份 姓名
---------- ------ ----------
粤A101 车主 麦迪
粤A101 使用者 姚明
粤A102 车主 纳什
粤A102 使用者 科比
粤A103 车主 科比
粤A103 使用者 麦迪

(所影响的行数为 6 行)
*/

热点排行