SQL查询问题。

请教一个sql查询问题。   我有两个表。其中 cost表中的  A是主项目 B是A的子项目。  price链接cost表获取价格。  请问有没有办法可以一条sql  查到  主项目下 包含的所有子项目金额到主项目上。   比如 查到的结果就是  A 的金额是4   C的金额是9image.png有办法吗?

FineReport 郝波 发布于 2021-4-22 16:48
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
luojian0323Lv7资深互助
发布于2021-4-22 17:00(编辑于 2021-4-22 17:10)

select A.字段,B.字段 from A

left join B

on A.字段1=B.字段1

  • 郝波 郝波(提问者) 然后呢?
    2021-04-22 17:02 
  • luojian0323 luojian0323 回复 郝波(提问者) A表是主表,B表是从表,A表与B表是一对多关系 的话,可以查出来A表对应B表的所有记录
    2021-04-22 17:09 
  • 郝波 郝波(提问者) 回复 luojian0323 大哥可能误会了 我希望得到主项目的金额 = 主项目+子项目
    2021-04-22 17:10 
  • luojian0323 luojian0323 回复 郝波(提问者) 那你提供三个表的表样,和你想要得到 的结果展示 我看下是什么关联方式 你现在提供的表数据,没有主项目数据,和子项目数据
    2021-04-22 17:20 
最佳回答
1
shirokoLv6资深互助
发布于2021-4-22 16:59

select * from cost a left join price b on  a.id=b.id

最佳回答
1
Z4u3z1Lv6专家互助
发布于2021-4-22 17:12

https://www.cnblogs.com/wangfuyou/p/5915322.html

最佳回答
1
xd4093Lv6初级互助
发布于2021-4-23 09:13(编辑于 2021-4-23 09:14)

给你写个吧   要递归取出所有产品明细的。

--向下递归

with temp 

as

(

select ID,PID,Name,cast(ID as varchar(max)) as fuid  from cost

--where ID=‘01‘

union all

select a.ID, a.PID,a.Name, temp.fuid+'/'+cast(a.id as varchar(max)) as fuid   from cost a

inner join temp on a.[PID] = temp.[ID]

)

--取产品展开明细

select a.*,b.Price,  case when CHARINDEX('/',fuid)>0  then  SUBSTRING(fuid,1,CHARINDEX('/',fuid)-1) else  fuid end   as topid

into #temp2

from temp a inner join price b on a.ID=b.id

--取所有产品的明细

select *  

from  cost  a 

left  join  #temp2 b on a.ID=b.topid

--取所有产品的合计

select a.name as 产品,sum(b.price) as 金额  

from  cost  a 

left  join  #temp2 b on a.ID=b.topid

group  by a.name

drop table #temp2

image.png

  • 4关注人数
  • 487浏览人数
  • 最后回答于:2021-4-23 09:14
    请选择关闭问题的原因
    确定 取消
    返回顶部