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这个比较好
[解决办法]
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,30UNION ALL SELECT 1,3,15UNION ALL SELECT 2,1,43UNION ALL SELECT 3,3,49UNION ALL SELECT 3,2,44SELECT * 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) tpivot (MAX(smoney) FOR cname in (宝马,大众,丰田)) tt/*sname 宝马 大众 丰田李四 43.00 NULL NULL王五 NULL 44.00 49.00张三 30.00 NULL 15.00*/
[解决办法]
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);