sql三张表连接有关问题,求sql语句,多谢啦,
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这个比较好
------解决方案--------------------
三张表 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);