求sql

caoyang0299 2017-07-06 10:38:30
如下数据
表a
单号1,金额1,
单号2,金额2,
表b
单号1,人员id1
表c
单号2,人员id2
人员表
人员id1,人员a
人员id2,人员b
得到如下结果
单号1,金额1,人员a
单号2,金额2,人员b
问下sql怎么写好
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 caoyang0299 的回复:
先把表b,c……union 在进行查询。 但是我这有个问题 b,c实际还有d,e两张表,b,c,d,e表的数据量都非常大。 a表数据少。
或者 单独查询出来然后union select * from a join xx union select * from b join xx union select * from c join xx。。。
caoyang0299 2017-07-06
  • 打赏
  • 举报
回复
先把表b,c……union 在进行查询。 但是我这有个问题 b,c实际还有d,e两张表,b,c,d,e表的数据量都非常大。 a表数据少。
二月十六 版主 2017-07-06
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#a') is null
drop table #a
Go
Create table #a([danhao] nvarchar(23),[jine] nvarchar(23))
Insert #a
select N'单号1',N'金额1' union all
select N'单号2',N'金额2'
GO
if not object_id(N'Tempdb..#b') is null
drop table #b
Go
Create table #b([danhao] nvarchar(23),[renyuan] nvarchar(25))
Insert #b
select N'单号1',N'人员id1'
GO
if not object_id(N'Tempdb..#c') is null
drop table #c
Go
Create table #c([danhao] nvarchar(23),[renyuan] nvarchar(25))
Insert #c
select N'单号2',N'人员id2'
GO
if not object_id(N'Tempdb..#人员表') is null
drop table #人员表
Go
Create table #人员表([id] nvarchar(25),[renyuan] nvarchar(23))
Insert #人员表
select N'人员id1',N'人员a' union all
select N'人员id2',N'人员b'
Go
--测试数据结束
SELECT #a.*,#人员表.renyuan
FROM #a
LEFT JOIN #b ON #b.danhao = #a.danhao
LEFT JOIN #c ON #c.danhao = #a.danhao
LEFT JOIN #人员表 ON ( CASE WHEN #b.renyuan IS NOT NULL THEN #b.renyuan
ELSE #c.renyuan
END ) = #人员表.id


  • 打赏
  • 举报
回复

with 表a(code,price)
as(
select '单号1','金额1' union all
select '单号2','金额2'),
表b(code,personId)
as(
select '单号1','人员id1'
),表c(code,personId)
as(
select '单号2','人员id2'
),
人员表(id,name)
as(
select '人员id1','人员a' union all
select '人员id2','人员b'
)
select a.code,a.price,c.name from 表a a join (select * from 表b union select * from 表c)b on a.code=b.code join 人员表 c on b.personId=c.id

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧