sql三张表连接问题,求sql语句,谢谢啦,急~~
三张表 s
id name
1 张三
2 李四
3 王五
c
id name
1 宝马
2 大众
3 丰田
sc
sid cid smoney
1 1 30
1 3 15
2 1 43
3 3 49
3 2 44
显示效果为:
姓名 宝马 大众 丰田
张三 30 null 15
李四 43 null null
王五 null 44 49
------解决方案--------------------inner join 连接三个表,可以再视图界面直接鼠标连接主键
------解决方案--------------------可以先查询表3 连接 1 2表 得到数据 然后列转行 得到你所要的结构.
推荐你去SQL版问。
------解决方案--------------------三表通过id连接查询
再行转列
SQL板块有
就是那个N遍的学生成绩查询
什么语文数学总分的
------解决方案--------------------创建视图
jion in 表 on 外键
------解决方案--------------------use master
go
create table cusName
(
[ID] int,
cusname varchar(50)
)
insert into cusName values(1,'张三')
insert into cusName values(2,'里斯')
insert into cusName values(3,'王五')
insert into cusName values(4,'李四')
create table car_Name
(
[ID] int,
_Name varchar(50)
)
insert into car_Name values(1,'宝马')
insert into car_Name values(2,'奔驰')
insert into car_Name values(3,'兰博基尼')
insert into car_Name values(4,'保时捷')
create table SellInfo
(
cusID int,
carIS int,
smoney int
)
insert into SellInfo values(1,1,30)
insert into SellInfo values(1,3,15)
insert into SellInfo values(2,1,43)
insert into SellInfo values(3,3,49)
insert into SellInfo values(3,2,44)
create view selectcar
as
select b.cusName,c._Name,a.smoney from SellInfo a LEFT OUTER JOIN
cusName b on a.cusID=b.[ID] LEFT OUTER JOIN
car_Name c on a.carIS=c.[ID]
select cusName as cusName ,
max(case _Name when '宝马' then smoney else 0 end) 宝马,
max(case _Name when '奔驰' then smoney else 0 end) 奔驰,
max(case _Name when '保时捷' then smoney else 0 end) 保时捷
from selectcar
group by cusName
------解决方案--------------------我的方法比较笨,还是采用http://topic.csdn.net/u/20101013/19/6F6E93C4-F83D-4597-BDE7-53CBCCED1AF8.html这个比较好
------解决方案--------------------SQL code
DECLARE @S TABLE(id int,name nvarchar(50))
INSERT @S SELECT 1,'张三'
UNION ALL SELECT 2,'李四'
UNION ALL SELECT 3,'王五'
DECLARE @C TABLE(id int,name nvarchar(50))
INSERT @C SELECT 1,'宝马'
UNION ALL SELECT 2,'大众'
UNION ALL SELECT 3,'丰田'
DECLARE @SC TABLE([sid] int,cid int,smoney decimal(18,2))
INSERT @SC SELECT 1,1,30
UNION ALL SELECT 1,3,15
UNION ALL SELECT 2,1,43
UNION ALL SELECT 3,3,49
UNION ALL SELECT 3,2,44
SELECT * FROM
(SELECT A.name as sname,B.name as cname,smoney FROM @S A,@C B,@SC C WHERE A.id=C.[sid] AND B.id=C.cid) t
pivot (MAX(smoney) FOR cname in (宝马,大众,丰田)) tt
/*
sname 宝马 大众 丰田
李四 43.00 NULL NULL
王五 NULL 44.00 49.00
张三 30.00 NULL 15.00
*/
------解决方案--------------------
SQL code
declare @cname varchar(8000);
set @cname='';
select @cname=@cname+','+name from c;--赋多个值
set @cname=STUFF(@cname,1,1,'');
set @cname='
select * from
(
select s.name as 姓名,sc.smoney,c.name as cname from s left join sc on s.id=sc.sid left join c on sc.cid=c.id
)as t pivot(max(t.smoney) for t.cname in('+@cname+'))t1';
exec(@cname);