Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有条件地删除左联接中的行或对要显示的值进行优先级排序_Sql_Sql Server - Fatal编程技术网

Sql 有条件地删除左联接中的行或对要显示的值进行优先级排序

Sql 有条件地删除左联接中的行或对要显示的值进行优先级排序,sql,sql-server,Sql,Sql Server,我在创建一个sql脚本时遇到了问题,该脚本对左连接的值进行了优先级排序。所以这是一个场景 我有这个疑问 SELECT a.calc_id, a.eff_post_tmst, a.event_id, a.error_flag, b.BC_PersonId, 'Test' AS submitted_by,818674 AS transaction_id, e.PersonType from dbo.cnv_pen_calc a LEFT join dbo.cnv_PpToBcPersonIdMa

我在创建一个sql脚本时遇到了问题,该脚本对左连接的值进行了优先级排序。所以这是一个场景

我有这个疑问

SELECT a.calc_id, a.eff_post_tmst, a.event_id, a.error_flag,
b.BC_PersonId,  'Test' AS submitted_by,818674 AS transaction_id,  e.PersonType
from dbo.cnv_pen_calc a
LEFT join dbo.cnv_PpToBcPersonIdMap b on a.person_id = b.PP_PersonId
INNER JOIN dbo.cdm_person e ON e.PersonId = b.BC_PersonId
where a.event_id = 'estimate' and a.error_flag = 0 AND a.calc_id = 100019 ORDER BY a.calc_id
正如您所看到的,“cnv_PpToBcPersonIdMap”和“cnv_pen_calc”中有一个左连接,这导致我的查询中使用不同的e.PersonType重复calc_id

这就是cnv_PpToBcPersonIdMap数据的样子

您可以看到,这个PP_personId有两条记录导致了查询的重复

我的主要目标是,如果calc_id有类似下图的副本

如果结果具有重复的calc_ID,则查询应仅显示PersonType='Employee'的数据 如果is没有任何重复的计算id,它应该保持原样


有没有办法做到这一点?我不是sql方面的专家。谢谢。

请使用下面的查询

select * from 
(SELECT a.calc_id, a.eff_post_tmst, a.event_id, a.error_flag,
b.BC_PersonId,  'Test' AS submitted_by,818674 AS transaction_id,  e.PersonType,
row_number() over(partition by a.calc_id order by e.PersonType) as rnk
from dbo.cnv_pen_calc a
LEFT join dbo.cnv_PpToBcPersonIdMap b on a.person_id = b.PP_PersonId
INNER JOIN dbo.cdm_person e ON e.PersonId = b.BC_PersonId
where a.event_id = 'estimate' and a.error_flag = 0 AND a.calc_id = 100019 ORDER BY 
a.calc_id) qry
where rnk = 1;

请用您使用的数据库标记您的问题:oracle、MySQL、sql server…?您使用的是哪个数据库?我使用的是ms sql抱歉that@GMB我用的是ms-SqlThank,谢谢,它奏效了!。你是个救命的人谢谢!。我刚刚删除了查询的订单,非常感谢。