【问题标题】:Joining 2 tables using the select value from the result of a CASE使用 CASE 结果中的选择值连接 2 个表
【发布时间】:2020-05-18 17:30:15
【问题描述】:

我有 1 个表,如果另一个 ID 为空,我必须在其中显示 1 个 ID 的值。

然后我需要使用该 CASE 的结果来加入与pid 具有相同 ID 的第二个表。

我被困住了,无法完全弄清楚这一点。有人可以帮助我纠正这个问题吗?

我的查询如下:

SELECT 
  fa.name, fa.email_address,
  CASE 
  WHEN pl.main_ID IS NULL THEN pl.sub_ID
  ELSE pl.main_ID
  END as pid ,pl.*
  FROM TableA pl 
INNER JOIN TableB fa ON fa.parent_account_sid = pl.pid

【问题讨论】:

  • 提示:coalesce(pl.main_ID, pl.sub_ID) 返回第一个非空参数。
  • 向我们展示一些示例表数据和预期结果 - 都是格式化文本,而不是图像。

标签: sql tsql inner-join


【解决方案1】:

使用横向连接(即apply):

SELECT fa.name, fa.email_address, v.pid, pl.*
FROM TableA pl CROSS APPLY
     (VALUES (COALESCE(pl.main_ID, pl.sub_ID)) v(pid) JOIN
     TableB fa
     ON fa.parent_account_sid = v.pid;

当然,您可能会发现 COALESCE() 非常简单,只需重复它就不是问题。

【讨论】:

    猜你喜欢
    • 2018-10-10
    • 2020-10-13
    • 2013-09-03
    • 2022-12-22
    • 2012-10-26
    • 2014-06-10
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多