多表联合查询 请教大神

小小小的程序员 2016-09-10 12:06:42
有三个表
Line LineOrder LineOrderPerson
Line 旅游线路表
LineOrder 旅游线路订单表
LineOrderPerson 旅游订单人员表

Line 字段 Id,Title
LineOrder字段 Id,LineTitle,LineId,OrderStatus,TotalPrice
LineOrderPerson字段 Id,OrderId

需求
获取所有线路的成功订单总量 及 线路名称 及 所有该线路的订单人员总数 及 该线路的订单总金额
...全文
130 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 ch21st 的回复:
你的需求没有描述清楚,比如: 计算:该线路的订单人员总数 及 该线路的订单总金额 是否包含失败的,我下面的例子未包含 否则需要将left join lineorder的条件改下

;WITH Line(ID,Title) AS (
  select 1,'a' UNION ALL
  SELECT 2, 'b' UNION ALL
  SELECT 3,'c'
),LineOrder(Id,LineTitle,LineId,OrderStatus,TotalPrice) AS (
    select 1,'a',1,'s;',100 UNION ALL
    select 2,'a',1,'f',120 UNION ALL
    select 3,'b',2,'f',150 UNION ALL
    SELECT 4,'b',2,'s',155 UNION ALL
    select 5,'c',3,'s',250 UNION ALL
    SELECT 6,'c',3,'f',255 UNION ALL
    SELECT 7,'c',3,'f',200
),LineOrderPerson(ID,OrderId) AS (
  select 1,4 UNION ALL
  select 2,6 UNION ALL
  select 3,1 UNION ALL
  select 4,7
)
select l.Id,l.Title,count(0) as SuccedOrderCount
       ,sum(case WHEN lop.id is null then 0 else 1 END )as LinePersonCount     
       ,sum(lo.TotalPrice) as LineTotalPrice
from Line as l LEFT JOIN  LineOrder as lo on lo.LineId=l.ID
left join LineOrderPerson as lop on lop.OrderId=lo.Id AND lo.OrderStatus='s'
GROUP BY l.Id,l.Title
牛逼,接分
道素 2016-09-10
  • 打赏
  • 举报
回复
你的需求没有描述清楚,比如: 计算:该线路的订单人员总数 及 该线路的订单总金额 是否包含失败的,我下面的例子未包含 否则需要将left join lineorder的条件改下

;WITH Line(ID,Title) AS (
  select 1,'a' UNION ALL
  SELECT 2, 'b' UNION ALL
  SELECT 3,'c'
),LineOrder(Id,LineTitle,LineId,OrderStatus,TotalPrice) AS (
    select 1,'a',1,'s;',100 UNION ALL
    select 2,'a',1,'f',120 UNION ALL
    select 3,'b',2,'f',150 UNION ALL
    SELECT 4,'b',2,'s',155 UNION ALL
    select 5,'c',3,'s',250 UNION ALL
    SELECT 6,'c',3,'f',255 UNION ALL
    SELECT 7,'c',3,'f',200
),LineOrderPerson(ID,OrderId) AS (
  select 1,4 UNION ALL
  select 2,6 UNION ALL
  select 3,1 UNION ALL
  select 4,7
)
select l.Id,l.Title,count(0) as SuccedOrderCount
       ,sum(case WHEN lop.id is null then 0 else 1 END )as LinePersonCount     
       ,sum(lo.TotalPrice) as LineTotalPrice
from Line as l LEFT JOIN  LineOrder as lo on lo.LineId=l.ID
left join LineOrderPerson as lop on lop.OrderId=lo.Id AND lo.OrderStatus='s'
GROUP BY l.Id,l.Title
  • 打赏
  • 举报
回复
自己顶一下.....

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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