表A:
样本表:
╔═══════════╦════════════════╦═══════╗
║ AccountID ║ AccountType ║ Agent ║
╠═══════════╬════════════════╬═══════╣
║ 413393 ║ Invoice ║ A ║
║ 417811 ║ Credit ║ NULL ║
╚═══════════╩════════════════╩═══════╝
表B:
样本表:
╔═══════════╦════════════════╦
║ AccountID ║ Ref_AccountID ║
╠═══════════╬════════════════╬
║ 413393 ║ NULL ║
║ 417811 ║ 413393 ║
╚═══════════╩════════════════╩
描述: 如果AccountType是发票,则会有与之关联的代理。从表A中,您可以看到它与代理A相关联。
当前输出:
╔═══════════╦═════════════╦═══════════════╦═══════╗
║ AccountID ║ AccountType ║ Ref_AccountID ║ Agent ║
╠═══════════╬═════════════╬═══════════════╬═══════╣
║ 413393 ║ Invoice ║ NULL ║ A ║
║ 417811 ║ Credit ║ 413393 ║ NULL ║
╚═══════════╩═════════════╩═══════════════╩═══════╝
预期输出:
╔═══════════╦═════════════╦═══════════════╦═══════╗
║ AccountID ║ AccountType ║ Ref_AccountID ║ Agent ║
╠═══════════╬═════════════╬═══════════════╬═══════╣
║ 413393 ║ Invoice ║ NULL ║ A ║
║ 417811 ║ Credit ║ 413393 ║ A ║
╚═══════════╩═════════════╩═══════════════╩═══════╝
应根据Ref_AccountID显示代理。在此示例中,Ref_AccountID为413393,对于表A中的此AccountID,代理为“A”。
由于
答案 0 :(得分:1)
这可能是您正在寻求的答案。我已经包含了一个完整的查询。它首先将表A和B连接在一起,然后将自联接返回到表A.从更新的信息中可以看出,当记录的Agent
列为空值时,您希望改为使用与Agent
与前一条记录的AccountID
匹配且空Ref_AccountID
的记录对应的Agent
值。自联接在查询中是必需的,因为它使Agent
的替代值可能在每个记录中可能具有可能的空Agent
列。这是查询:
SELECT t1.AccountID, t1.AccountType, t2.Ref_AccountID,
CASE WHEN t1.Agent IS NOT NULL THEN t1.Agent ELSE t3.Agent END AS Agent
FROM TableA t1 INNER JOIN TableB t2 ON t1.AccountID = t2.AccountID
LEFT JOIN TableA t3 ON t2.Ref_AcccountID = t3.AccountID
这是一个有效的SQL Fiddle,您可以使用原始问题中提供的测试数据来测试此查询。
答案 1 :(得分:0)
您正在寻找
SELECT * FROM yourTable
WHERE
AccountID = 466361
在这里查看更多示例: