SQL Server查询类似于excel中的VLOOKUP逻辑

时间:2015-11-11 04:28:29

标签: sql sql-server

表A:

  • AccountID(PK,int,not null)
  • 代理(varchar(50),null)
  • AccountType(varchar(50),null)

样本表:

╔═══════════╦════════════════╦═══════╗
║ AccountID ║  AccountType   ║ Agent ║
╠═══════════╬════════════════╬═══════╣
║  413393   ║  Invoice       ║  A    ║
║  417811   ║  Credit        ║  NULL ║
╚═══════════╩════════════════╩═══════╝

表B:

  • AccountID(int,not null) - 这是外键,我根据匹配的AccountID记录从两个表中提取数据。
  • Ref_AccountID(int,null)

样本表:

╔═══════════╦════════════════╦
║ 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”。

由于

2 个答案:

答案 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  

在这里查看更多示例:

https://msdn.microsoft.com/en-us/library/ms187731.aspx