首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ms sqlserver查询语句

2014-01-13 
ms sqlserver查询语句 高手进 三张关联表综合的查询。 首先,TB_Card c为总表,TB_CrabCard card和TB_SeaFood

ms sqlserver查询语句 高手进
 三张关联表综合的查询。
 首先,TB_Card c为总表,TB_CrabCard card和TB_SeaFoodCard seafood为TB_Card的关联表
 其中c.ID=card.Pid,c.ID=seafood.Pid。c.Kind分为2种
 c.kind=1时,从card表中找数据,c.kind=2时,从seafood表中找数据
 下边是三张表的表结构和使用数据


create table TB_Card
(
ID int identity primary key,
UserName nvarchar(200),
[PassWord] nvarchar(200),
[Status] int,
Kind int,
IsSpecial bit,
SpecialName nvarchar(200),
AddTime datetime default(getdate())
)
create table TB_CrabCard
(
ID int identity primary key,
Pid int,--关联TB_Card中的Id--
CardName nvarchar(200),
Price decimal(8,1),
CardNum nvarchar(10),
CardType nvarchar(10),
CardSize nvarchar(200),
IsSpecial bit,
SpecialName nvarchar(200)
)
create table TB_SeaFoodCard
(
ID int identity primary key,
Pid int,--关联TB_Card中的ID--
Name nvarchar(200),
Price decimal(8,1),
IsSpecial bit,
SpecialName nvarchar(200),
SpecialNum nvarchar(10),
SpecialType nvarchar(10),
SpecialSize nvarchar(200)
)
--使用数据--
insert into TB_Card values('A79800001','012356w2',1,2,1,'2013-12-12') --ID=1
insert into TB_Card values('A79800002','d2454834',1,2,1,'2013-12-12') --ID=2
insert into TB_Card values('A79800009','c5487348',1,2,1,'2013-12-12') --ID=3
insert into TB_Card values('A79800009','3d543168',1,2,1,'2013-12-12') --ID=4

insert into TB_Card values('x79800001','012356w2',1,1,1,'2013-12-12') --ID=5
insert into TB_Card values('x79800002','d2454834',1,1,1,'2013-12-12') --ID=6
insert into TB_Card values('x79800009','c5487348',1,1,1,'2013-12-12') --ID=7
insert into TB_Card values('x79800009','3d543168',1,1,1,'2013-12-12') --ID=8

insert into TB_SeaFoodCard values('1','海鲜大礼包A套餐',798.0,1,'798蟹卡','3','798','雌蟹3只 雄蟹3只')
insert into TB_SeaFoodCard values('2','海鲜大礼包B套餐',1150.0,1,'1150蟹卡','3','1150','雌蟹4只 雄蟹4只')
insert into TB_SeaFoodCard values('3','海鲜大礼包C套餐',1980.0,1,'1980蟹卡','3','1980','雌蟹5只 雄蟹5只')
insert into TB_SeaFoodCard values('4','海鲜大礼包D套餐',2780.0,1,'2780蟹卡','3','2780','雌蟹6只 雄蟹6只')

insert into TB_CrabCard values('5','蟹A套餐',798.0,'3','798','雌蟹3只 雄蟹3只',1,'海鲜大礼包A套餐')
insert into TB_CrabCard values('6','蟹B套餐',1150.0,'4','1150','雌蟹4只 雄蟹4只',1,'海鲜大礼包B套餐')
insert into TB_CrabCard values('7','蟹C套餐',1980.0,'5','1980','雌蟹5只 雄蟹5只',1,'海鲜大礼包C套餐')
insert into TB_CrabCard values('8','蟹D套餐',2780.0,'6','2780','雌蟹6只 雄蟹6只',1,'海鲜大礼包D套餐')



问题:
 使用试图或存储过程查询以下内容:
 查询出TB_Card中所有数据
 当kind=1时
 查询出TB_CrabCard中与ID相关联的行中,CardName、Price、CardNum、CardType
 四个字段的内容,并合并为TB_Card查询中的一个字段,字段名名为Info
 当kind=2时
 查询出TB_SeaFoodCard中与ID相关联的行中,Name、Price两个字段的内容,
 并合并为TB_Card查询中的一个字段,字段名名为Info



[解决办法]
首先用Union关联TB_CrabCard和TB_SeaFoodCard得到一个视图

然后 TB_Card与 视力关联


Create View v1 as
Select  1 as Kind,ID,Pid,(CardName + cast(Price as nvarchar(10)) + CardNum +CardType) as Info
Union
Select  2 as Kind,ID,Pid,(Name + cast(Price as nvarchar(10))) as Info


关联不用我说了吧

on TB_Card.kind=v1.kind and TB_Card.id=v1.Pid

热点排行