Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 使用动态值连接case语句_Sql_Postgresql - Fatal编程技术网

Sql 使用动态值连接case语句

Sql 使用动态值连接case语句,sql,postgresql,Sql,Postgresql,我在放屁,需要一些帮助。我希望我对这个问题的描述足够简洁明了 比如说,我有一家汽车店,我与保险公司签订了合同,以一定的成本维修汽车。这些成本基于保险公司、执行工作的技术人员和工作类型。然而,这些合同有点奇怪。只有某些技术人员对特定工作有特殊费率 例如:与a公司签订的合同规定,如果Sally更换了一台发动机,他们将支付XX美元,但如果是其他人,他们将支付YY美元 现在,我正试图估算我公司的现金流,因此我想根据上述标准计算预期付款。让我们假设我有一个包含作业信息的表(作业),该表包含作业类型id、技

我在放屁,需要一些帮助。我希望我对这个问题的描述足够简洁明了

比如说,我有一家汽车店,我与保险公司签订了合同,以一定的成本维修汽车。这些成本基于保险公司、执行工作的技术人员和工作类型。然而,这些合同有点奇怪。只有某些技术人员对特定工作有特殊费率

例如:与a公司签订的合同规定,如果Sally更换了一台发动机,他们将支付XX美元,但如果是其他人,他们将支付YY美元

现在,我正试图估算我公司的现金流,因此我想根据上述标准计算预期付款。让我们假设我有一个包含作业信息的表(作业),该表包含作业类型id、技师id和保险id的字段。还有另一个表(付款计划)。此表还包含作业类型id、技师id和保险id。如果未指定技师(例如:除Sally之外的任何人),则技师id为0

如果Sally(technician_id=26)是唯一一个对所有保险公司都有特殊费率的人,那么我很容易创建一个加入条件:

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?请尝试提供示例数据、预期输出以及其他相关内容。