带有join子句的case语句

时间:2015-02-04 20:01:06

标签: sql expression case

我有一张表A,如下所示

Acct_nbr      acount_relation_nbr     acct_relation_code     property
1             0                       0                      12345
1             9                       T                      ----
2             0                       0                      345
2             9                       0                      ----

acct号码可以有多个主要和次要记录,通过account_relation_nbr列进行区分 - 如果0则为primary,如果为9则为secondary。 我希望能够根据以下条件在SQl中编写一个case表达式 - 如果acount _relation_nbr = 9,那么它从acount_relation_nbr = 0中选择property_id,因为它们是同一个帐号的2个记录。 基于property_id的结果,这将填充另一个表B中的property_id列。 希望我的问题清楚。任何输入都将受到高度赞赏。

谢谢, Pallavi

2 个答案:

答案 0 :(得分:1)

您可以预先计算acount_relation_nbr = 0的属性值,然后在case

时使用acount_relation_nbr = 9来使用该值
 SELECT Acct_nbr
    ,acount_relation_nbr
    ,acct_relation_code
    ,CASE 
        WHEN acount_relation_nbr = 9
            THEN cte.property
        ELSE tableA.property
        END property
FROM TABLEA
INNER JOIN (
    SELECT property
        ,Acct_nbr
    FROM tableA
    WHERE acount_relation_nbr = 0
    ) CTE 
ON TABLEA.Acct_nbr = CTE.Acct_nbr

答案 1 :(得分:0)

所以我假设您正试图获得这样的输出:

Acct_nbr      acount_relation_nbr     acct_relation_code     property
1             0                       0                      12345
1             9                       T                      12345
2             0                       0                      345
2             9                       0                      345

您可以使用嵌套查询来实现此目的,因此您不需要大小写:

SELECT acct_nbr,account_relation_nbr,acct_relation_code,
   (SELECT property FROM TABLE inr 
   WHERE inr.acct_nbr = out.acct_nbr
         AND inr.account_relation_nbr=0) 
FROM TABLE out