【问题标题】:Case statement with join clause带有连接子句的 case 语句
【发布时间】:2015-02-04 20:01:06
【问题描述】:

我有一个如下表A

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

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

谢谢, 帕拉维

【问题讨论】:

  • 请编辑您的问题并显示您想要达到的结果。

标签: sql expression case


【解决方案1】:

您可以预先计算acount_relation_nbr = 0 的属性值,然后在acount_relation_nbr = 9 时使用case 来使用该值

 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

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 非常感谢您的意见
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
相关资源
最近更新 更多