Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.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 - Fatal编程技术网

SQL从两个单独的行、两个单独的列中减去一个值

SQL从两个单独的行、两个单独的列中减去一个值,sql,Sql,我很难弄明白这一点。。。我正在尝试编写一个SQL查询,从该表中减去2个值: 费率表: 我需要创建一个查询,返回CBBR中Policy=12345和benefit=a的值的结果,然后减去IBBR中Policy=12345和benefit=B$1.34-0.56的值 有什么想法吗?你的问题需要更多的解释,根据我的理解,我认为你应该使用案例陈述作为解释- Select Case when (Policy = 12345 and benefit = A) then CBBR When (Po

我很难弄明白这一点。。。我正在尝试编写一个SQL查询,从该表中减去2个值:

费率表:

我需要创建一个查询,返回CBBR中Policy=12345和benefit=a的值的结果,然后减去IBBR中Policy=12345和benefit=B$1.34-0.56的值


有什么想法吗?

你的问题需要更多的解释,根据我的理解,我认为你应该使用案例陈述作为解释-

Select 
Case when (Policy = 12345 and benefit = A) then CBBR
     When (Policy = 12345 and benefit = B) then CBBR-IBBR
END as Value
From Yourtable

根据查询中提到的详细信息,您需要在特定条件下区分CBBR和IBBR

SELECT CBBR-
  (SELECT IBBR
   FROM RateTable
   WHERE Policy = 12345
     AND benefit = 'B') AS IBBR
FROM RateTable
WHERE Policy = 12345
  AND benefit = 'A';

但是,如果您需要广义查询,那么我们可能会使用SUM或其他方法。

Ankit Jindal已经给出了正确的答案。但是,我想指出的是,不需要使用任何子查询,因为它们会显著降低性能。在这种特殊情况下,联接运算符就足够了:

I am not clear that you want the diff for only 1 value "B" or the pattern will go on if condition (Policy = 12345 and benefit ='A') to get the diff of next row.

ASSUMING diff you want to calculate for all next rows

select *,case when Benefit='A'AND Policy=12345 then CBBR-new_IBBR else CBBR end as diff from(
select *,lead(IBBR,1) over (order by RecordID ASC) as new_IBBR  from <TABLE NAME>)x
选择 rta.CBBR-rtb.IBBR作为结果 从作为rta的费率表 将RateTable作为rtb.Policy=rta.Policy和rtb.Benefit='B'上的rtb加入 其中Policy=12345 和受益于
您好@suttoa,请告诉我们您尝试了什么。@suttoa,我添加了一个在这种情况下可以使用的查询,但是如果您需要任何概括,请分享更多信息。您的回答将导致$4.56-$0.56,这是错误的。您能概括一下您想要的查询行为吗。类似于在C和不同策略的情况下会发生什么。向这个代码示例添加解释将有助于改进这个答案。
I am not clear that you want the diff for only 1 value "B" or the pattern will go on if condition (Policy = 12345 and benefit ='A') to get the diff of next row.

ASSUMING diff you want to calculate for all next rows

select *,case when Benefit='A'AND Policy=12345 then CBBR-new_IBBR else CBBR end as diff from(
select *,lead(IBBR,1) over (order by RecordID ASC) as new_IBBR  from <TABLE NAME>)x