0

我有一个场景,我需要根据他们的代码类型比较金额,并将该金额与另一种代码类型进行比较并返回结果。

例如:

SELECT distinct P.TERM_KEY, C.Country_code, Amt.DAMT
FROM TERM P
      INNER JOIN Country C ON P.TERM_KEY= C.TERM_KEY 
      INNER JOIN Amount Amt ON C.COU_KEY = Amt.PARENT_KEY AND Amt.PARENT_TABLE=Country
WHERE P.Term_no = 'ABCD' AND C.Country_CD IN (50, 51) 

此查询的结果如下:

    TERM_KEY        Country_code     DAMT
    201000000085    5000             1000.00
    201000000083    5001             750.00
    201000000081    5001             1000.00
    201000000342    5000             1000.00
    201000002340    5001             750.00
    201000034733    5001             1000.00

现在我需要将国家代码(50 和 51)的 Damt 与国家代码 20 进行比较,如果国家代码 20 的 Damt 和国家代码(50、51)相等,我需要将值报告为“5869”,否则如果不相等我需要将值报告为“0000”。

我将在其他情况下使用上述结果集

例子

Case  
WHEN C.County = 999 and C.Contry_code = '20' AND ISNULL(CDED.DAmt,0)=0 THEN '5869'  
  C.County = 999 and C.Contry_code = '20' AND ISNULL(Amt.DAmt,0)!=0 THEN '0000'
end as Country_County

所以 CDED 必须返回我需要使用的结果集。怎么可能呢?

4

1 回答 1

0

不确定您的数据是什么样的或它是如何相关的,但我只会创建 2 个子查询并加入它们。

select  case 
            when ISNULL(subset_5051.DAmt,0) = ISNULL(subset_20.DAmt,0) then '5869'
            else '0000'
        end
from
    (
        SELECT distinct P.TERM_KEY, C.Country_code, Amt.DAMT
        FROM TERM P
              INNER JOIN Country C ON P.TERM_KEY= C.TERM_KEY 
              INNER JOIN Amount Amt ON C.COU_KEY = Amt.PARENT_KEY AND Amt.PARENT_TABLE=Country
        WHERE P.Term_no = 'ABCD' AND C.Country_CD IN (50, 51) 
    ) as subset_5051

    [left / right / inner / full] join

    (
        SELECT distinct P.TERM_KEY, C.Country_code, Amt.DAMT
        FROM TERM P
              INNER JOIN Country C ON P.TERM_KEY= C.TERM_KEY 
              INNER JOIN Amount Amt ON C.COU_KEY = Amt.PARENT_KEY AND Amt.PARENT_TABLE=Country
        WHERE P.Term_no = 'ABCD' AND C.Country_CD IN (20) 
    ) as subset_20
    on subset_5051.[?] =  subset_20.[?] 

我不知道您应该使用哪种类型的联接,或者要加入哪些列,但这应该可以帮助您入门。

于 2013-03-01T18:45:28.547 回答