我想基于ViewPriority将表CustomerAgreementRole加入到AgreementRoleGroup中只有一行。示例:CustomerAgreementRole可以具有三行。我只想要ViewPriority最高的加入的行
AgreementId, AgreementRoleId
1 1
1 2
1 3
CustomerAgreementRole
1. AgreementId
2. AgreementRoleId
AgreementRoleGroup
1. AgreementRoleId
2. ViewPriority
当前查询:
select * from CustomerAgreementRole car
join (select agreementRoleId, min(ViewPriority) as mi from AgreementRoleGroup group by AgreementRoleId) as arg on car.AgreementRoleId = arg.AgreementRoleId
预期结果:
AgreementId, AgreementRoleId, ViewPriority
1 1 1
答案 0 :(得分:0)
可能是这样的:
git reset --hard develop
答案 1 :(得分:0)
由于AgreementRoleGroup已获得AgreementRoleId,因此我们可以{% for kpi in csf.getKeyPerformanceIndicators%}
...
{% endfor %}
进行一些子查询
join
但是我会说使用select a.*, b2.ViewPriority from CustomerAgreementRole a left join
(
select b.AgreementRoleId, b.ViewPriority
from AgreementRoleGroup b
where b.ViewPriority =
(
select min(ViewPriority)
from AgreementRoleGroup
)
) b2
on a.AgreementRoleId=b2.AgreementRoleId
并不是最好的方法,您应该在@gotqn答案中使用min()
,但现在可以使用。
重新编辑
top
我将这些用作示例数据并获得了此结果documentation
如果您只希望一行而不在乎ViewPriority是否需要最小,请改用create table CustomerAgreementRole (AgreementId int,AgreementRoleId int);
insert into CustomerAgreementRole values (1,1);
insert into CustomerAgreementRole values (2,3);
insert into CustomerAgreementRole values (3,4);
insert into CustomerAgreementRole values (4,2);
create table AgreementRoleGroup (AgreementRoleId int, ViewPriority int);
insert into AgreementRoleGroup values (1,3);
insert into AgreementRoleGroup values (3,4);
insert into AgreementRoleGroup values (4,2);
insert into AgreementRoleGroup values (2,1);
top
答案 2 :(得分:0)
对于每个AgreementId,您需要具有最高优先级(最低ViewPriority值)的AgreementRoleId。这意味着您要对CustomerAgreementRole行进行排名,并且仅显示排名最高的行。排名通常是通过SQL中的ROW_NUMBER
,RANK
或DENSE_RANK
完成的。
select AgreementId, AgreementRoleId, ViewPriority
from
(
select
car.AgreementId, car.AgreementRoleId, arg.ViewPriority,
row_number() over (partition by car.AgreementId order by arg.ViewPriority) as rn
from CustomerAgreementRole car
join AgreementRoleGroup arg on arg.AgreementRoleId = car.AgreementRoleId
) ranked
where rn = 1;
答案 3 :(得分:0)
使其与此配合使用:
WITH CTEViewPriority (lowestViewPriority, agreementId) as (
select min(ViewPriority), AgreementId from CustomerAgreementRole as car
left join AgreementRoleGroup arg on car.AgreementRoleId = arg.AgreementRoleId
group by agreementId
)
select * from CustomerAgreementRole as car
inner join CTEViewPriority as arg on lowestViewPriority = arg.agreementRoleId and arg.agreementId = car.agreementId