【问题标题】:query two tables but select different columns depending on the value of field查询两个表,但根据字段的值选择不同的列
【发布时间】:2015-11-09 12:12:42
【问题描述】:

我有两个包含订单的表。我需要检查表格是否匹配。表格如下所示,

tblOrders_Sent

Side   Tag     FxBuy  BuyAmount   FxCost CostAmount
B      CHFEUR  CHF    50          EUR    0
B      EURSEK  SEK    75          EUR    0
B      EURNOK  NOK    35          EUR    0
B      DKKEUR  DKK    20          EUR    0
S      CHFEUR  EUR    0           CHF    10    
S      EURSEK  EUR    0           SEK    20
S      EURNOK  EUR    0           NOK    40

tblOrders_Recieved

Tag        FxBuy  MktBuy    FxCost MktCost
EURNOK     NOK    35        EUR    0
DKKEUR     DKK    20        EUR    0
CHFEUR     CHF    50        EUR    0
EURSEK     SEK    75        EUR    0
EURNOK     EUR    0         NOK    40
EURSEK     EUR    0         SEK    20
CHFEUR     EUR    0         CHF    10

当 Orders_Sent 表中的边为“B”时,我需要根据 Orders_Recieved 表中的 MktBuy 金额检查 BuyAmount。如果 Side 是“S”,但我需要检查 Orders_Recieved 表中的 CostAmount 与 MktCost。这是可能的还是我需要将查询拆分为两个单独的查询?

我使用的是 SQL Server 2012

期望的输出

FxBuy   FxCost   SentAmt   RecievedAmt  Diff
CHF     EUR      50        50           0
SEK     EUR      75        75           0
NOK     EUR      35        35           0
DKK     EUR      20        20           0
EUR     CHF      10        10           0
EUR     SEK      20        20           0
EUR     NOK      40        40           0

【问题讨论】:

  • 你也可以添加预期的结果吗?
  • 当您使用相同的货币对进行多次交易时会发生什么?要么指定这不可能发生,要么编辑您的问题并描述如何处理这种情况。
  • 可能有多个交易使用相同的货币对——抱歉我应该指出这一点。虽然金额总是不同的
  • 我已经更新了我希望实现的输出
  • 是的,这是可能的。关键字是case expression

标签: sql sql-server sql-server-2012


【解决方案1】:

CASE 关键字对此有帮助。在您的情况下,据我了解,该示例可能如下所示:

select 
    tblOrders_sent.fxBuy As FxBuy,
    tblorders_sent.fxCost As FxCost,
    tblorders_sent.buyamount as SentAmt,
    tblorders_received.mktbuy as ReceivedAmt,
    CASE Side WHEN 'B' THEN tblorders_sent.buyamount - tblorders_received.mktbuy END 
    tblorders_sent.costamount - tblorders_received.mktcost END AS diff
from tblOrders_sent 
inner join tblOrders_received on
    tblorders_sent.tag = tblorders_received.tag

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多