日期:2014-05-18  浏览次数:20406 次

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);