查询两个表,但根据字段的值选择不同的列

时间:2015-11-09 12:12:42

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

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

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

当Side是" B"在Orders_Sent表中,我需要根据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

1 个答案:

答案 0 :(得分: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