Sql 使用动态值连接case语句
我在放屁,需要一些帮助。我希望我对这个问题的描述足够简洁明了 比如说,我有一家汽车店,我与保险公司签订了合同,以一定的成本维修汽车。这些成本基于保险公司、执行工作的技术人员和工作类型。然而,这些合同有点奇怪。只有某些技术人员对特定工作有特殊费率 例如:与a公司签订的合同规定,如果Sally更换了一台发动机,他们将支付XX美元,但如果是其他人,他们将支付YY美元 现在,我正试图估算我公司的现金流,因此我想根据上述标准计算预期付款。让我们假设我有一个包含作业信息的表(作业),该表包含作业类型id、技师id和保险id的字段。还有另一个表(付款计划)。此表还包含作业类型id、技师id和保险id。如果未指定技师(例如:除Sally之外的任何人),则技师id为0 如果Sally(technician_id=26)是唯一一个对所有保险公司都有特殊费率的人,那么我很容易创建一个加入条件:Sql 使用动态值连接case语句,sql,postgresql,Sql,Postgresql,我在放屁,需要一些帮助。我希望我对这个问题的描述足够简洁明了 比如说,我有一家汽车店,我与保险公司签订了合同,以一定的成本维修汽车。这些成本基于保险公司、执行工作的技术人员和工作类型。然而,这些合同有点奇怪。只有某些技术人员对特定工作有特殊费率 例如:与a公司签订的合同规定,如果Sally更换了一台发动机,他们将支付XX美元,但如果是其他人,他们将支付YY美元 现在,我正试图估算我公司的现金流,因此我想根据上述标准计算预期付款。让我们假设我有一个包含作业信息的表(作业),该表包含作业类型id、技
select
*
from jobs as j
join payment_schedule as s on s.insurance_id = j.insurance_id
and j.job_type_id = s.job_type_id
and s.technician_id = case when j.technician_id = 26 then j.technician_id else 0 end
然而,现实比这更复杂。Sally可能是那个特定地点唯一一个有特殊价格的人,但我们有多个地点,有许多技术人员。这些契约经常更改,因此我需要能够创建一个case语句来“动态”检查id。我试过这个,知道它可能会很慢。是的
select
*
from jobs as j
join payment_schedule as s on s.insurance_id = j.insurance_id
and j.job_type_id = s.job_type_id
and s.technician_id = case when j.technician_id in (select distinct technician_id from payment_schedule) then j.technician_id else 0 end
这肯定很慢,我并不感到惊讶,但我很难想出一个好方法来确保我们不必将ID硬编码到案例陈述中,就不会为每个工作记录(1对1关系)获得多个付款计划记录。有人对此有什么建议吗
我觉得我错过了一件非常明显的事情:我盯着这件事看太久了,需要一双新鲜的眼睛。谢谢我相信您正在寻找以下内容,但如果您提供一些数据和所需的输出将有所帮助
select
*
from jobs as j
join payment_schedule as s on s.insurance_id = j.insurance_id
and j.job_type_id = s.job_type_id
and 1 = case when j.technician_id = s.technician_id then 1 else 0 end
问题是什么?@我很难想出一个好方法来确保我们不会在不将ID硬编码到案例陈述中的情况下为每个工作记录(1对1关系)获得多个付款计划记录。有人对此有什么建议吗?我很难想出一个好方法来确保我们不会在不将ID硬编码到案例陈述中的情况下为每个工作记录(1对1关系)获得多个付款计划记录。是否有人对此有任何建议?是否可以作为子查询加入distinct并将isnull替换为0?请尝试提供示例数据、预期输出以及其他相关内容。