db2 根据B中的多条记录选择A表中的记录

xurqigkl  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(246)

我有以下销售结构。经理按区域分配了一名销售人员,但也销售自己。下表包含经理与销售人员/区域之间的链接。
表:汽水分离再热器
| 管理员|销售部|地区名称|
| - -|- -|- -|
| 移动平均|服务协议|东部|
| 移动平均|SB型|东部|
| 移动平均|SB型|北部|
| 兆字节|服务协议|西部|
| 兆字节|SB型|西部|
此表列出了每个人员评分的订单。
表:ORD
| 订单ID|销售部|地区名称|
| - -|- -|- -|
| 一个|移动平均|东部|
| 2个|移动平均|西部|
| 三个|服务协议|西部|
| 四个|服务协议|东部|
| 五个|SB型|东部|
| 六个|SB型|西部|
| 七个|兆字节|北部|
| 八个|SB型|北部|
我需要每个经理的订单输出。例如,对于经理MA,它将如下所示:
| 订单ID|销售部|地区名称|
| - -|- -|- -|
| 一个|移动平均|东部|
| 2个|移动平均|西部|
| 四个|服务协议|东部|
| 五个|SB型|东部|
| 八个|SB型|北部|
对于MB,它如下所示:
| 订单ID|销售部|地区名称|
| - -|- -|- -|
| 三个|服务协议|西部|
| 六个|SB型|西部|
| 七个|兆字节|北部|
是否有SQL语句可以生成此结果?

dy2hfwbg

dy2hfwbg1#

如果出于任何原因您需要返回/使用管理器,可以使用类似以下内容的代码:

SELECT ORD.*, IFNULL(MSR.Manager,ORD.Sales) as ActualManager 
FROM ORD
LEFT JOIN MSR
 ON (ORD.Sales = MSR.Sales and ORD.Region = MSR.Region)
WHERE IFNULL(MSR.Manager,ORD.Sales) = 'MA'
ORDER BY OrderId
iqjalb3h

iqjalb3h2#

下面的查询会得到你想要的结果,你只需要换出你要找的经理在哪里,这会返回你要找的MA。

SELECT Distinct A.OrderId, A.Sales, A.Region FROM ORD a 
left join MSR b on (a.Sales = b.Sales OR B.Manager = A.Sales) and a.Region = B.Region 
where B.Manager = 'MA' or A.Sales = 'MA'
order by orderid asc
ryhaxcpt

ryhaxcpt3#

With cte_MA as (
Select Distinct sales from mar where manager = 'MA' 
Union 
Select Distinct manager from mar where manager = 'MA' ),
Cte_MB as (
Select Distinct sales from mar where manager = 'MB' 
Union 
Select Distinct manager from mar where manager = 'MB'),
Cte_MAorder as (
Select a orderid, a.sales, a region from ord a inner cte_MA b on a.sales = b.sales),
Cte_MBorder as (
Select a.orderid, a.sales, a.region from ord a inner cte_MB b on a.sales = b.sales)
select *  from cte_MAorder;
Select *  from cte_MBorder;

您应该运行所有查询,以向上选择查询如果您运行select * from cte_maorder查询您获得MA分配的销售人员订单列表您运行select * from cte_mbord查询您获得MB分配的销售人员订单列表

相关问题