簡體   English   中英

用 WHERE 子句划分 2 列

[英]Divide 2 columns with a WHERE clause

要求:

將歐元匯率除以美元匯率並在新列中顯示結果。 例如,0.912/0.822 = 1.1。 我想要一個名為“EUR/USD”的新列中的 1.1

我將不得不對幾種不同的利率進行划分,但我們可以使用歐元/美元作為示例。

詢問

select er.Rate, wc.CurrencyCode + ' ' + wc.Descr as [Currency], er.EDate as [Exchange Date], ISNULL(wc.MonSymbol, ' ') AS [Symbol], er2.Rate as [Rate2]
from ExchangeRate er
JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
JOIN ExchangeRate er2 on er.InExchangeRateId = er2.InExchangeRateId
inner join (
    select wc.CurrencyCode, max(er.EDate) as MaxDate
    from ExchangeRate er
    JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
    group by wc.CurrencyCode
) erm on wc.CurrencyCode = erm.CurrencyCode and er.EDate = erm.MaxDate

當前結果

在此處輸入圖片說明

架構

試圖

select b.*,max(case when b.currency='EUR Euro' then b.Rate end)/max(case when 

     b.currency='USD US Dollar' then b.Rate end) as [EUR/USD] from

    (select er.Rate as Rate, wc.CurrencyCode + ' ' + wc.Descr as [Currency], er.EDate 
    as [Exchange Date], ISNULL(wc.MonSymbol, ' ') AS [Symbol], er2.Rate as [Rate2]
    from ExchangeRate er
    JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
      JOIN ExchangeRate er2 on er.InExchangeRateId = er2.InExchangeRateId
  inner join (
     select wc.CurrencyCode, max(er.EDate) as MaxDate
       from ExchangeRate er
       JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
     group by wc.CurrencyCode
    ) erm on wc.CurrencyCode = erm.CurrencyCode and er.EDate = erm.MaxDate)b
    group by b.rate, b.Currency, b.[Exchange Date], b.Symbol, b.Rate2

結果:

在此處輸入圖片說明

解決方案:

select er.Rate, wc.CurrencyCode + ' ' + wc.Descr as [Currency], er.EDate as [Exchange Date], ISNULL(wc.MonSymbol, ' ') AS [Symbol],
[eur].Rate/[usd].rate as [EUR/USD], [usd].Rate/[zar].rate as [USD/ZAR], [eur].Rate/[zar].rate as [EUR/ZAR], [eur].Rate/[nok].rate as [EUR/NOK],
[eur].Rate/[bwp].rate as [EUR/BWP], [bwp].Rate/[zar].rate as [ZAR/BWP]
from ExchangeRate er
JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
inner join (
    select wc.CurrencyCode, max(er.EDate) as MaxDate
    from ExchangeRate er
    JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
    group by wc.CurrencyCode
) erm on wc.CurrencyCode = erm.CurrencyCode and er.EDate = erm.MaxDate
OUTER APPLY
(SELECT er3.Rate, wc3.CurrencyCode + ' ' + wc3.Descr as [Currency], er3.EDate as [Exchange Date]
FROM ExchangeRate er3
JOIN WorldCurrency wc3 on er3.ExCurrencyId = WC3.InCurrencyId
WHERE wc3.CurrencyCode = 'USD' AND er3.EDate = erm.MaxDate) as [USD]

OUTER APPLY
(SELECT er4.Rate, wc4.CurrencyCode + ' ' + wc4.Descr as [Currency], er4.EDate as [Exchange Date]
FROM ExchangeRate er4
JOIN WorldCurrency wc4 on er4.ExCurrencyId = WC4.InCurrencyId
WHERE wc4.CurrencyCode = 'EUR' AND er4.EDate = erm.MaxDate) as [EUR]

OUTER APPLY
(SELECT er5.Rate, wc5.CurrencyCode + ' ' + wc5.Descr as [Currency], er5.EDate as [Exchange Date]
FROM ExchangeRate er5
JOIN WorldCurrency wc5 on er5.ExCurrencyId = WC5.InCurrencyId
WHERE wc5.CurrencyCode = 'ZAR' AND er5.EDate = erm.MaxDate) as [ZAR]

OUTER APPLY
(SELECT er6.Rate, wc6.CurrencyCode + ' ' + wc6.Descr as [Currency], er6.EDate as [Exchange Date]
FROM ExchangeRate er6
JOIN WorldCurrency wc6 on er6.ExCurrencyId = WC6.InCurrencyId
WHERE wc6.CurrencyCode = 'NOK' AND er6.EDate = erm.MaxDate) as [NOK]

OUTER APPLY
(SELECT er7.Rate, wc7.CurrencyCode + ' ' + wc7.Descr as [Currency], er7.EDate as [Exchange Date]
FROM ExchangeRate er7
JOIN WorldCurrency wc7 on er7.ExCurrencyId = WC7.InCurrencyId
WHERE wc7.CurrencyCode = 'BWP' AND er7.EDate = erm.MaxDate

) as [BWP]

嘗試這個

    select b.*,case when b.currency='EUR Euro' then b.Rate end/case when 

     b.currency='USD US Dollar' then b.Rate end as [EUR/USD] from

    (select er.Rate as Rate, wc.CurrencyCode + ' ' + wc.Descr as [Currency], er.EDate 
    as [Exchange Date], ISNULL(wc.MonSymbol, ' ') AS [Symbol], er2.Rate as [Rate2]
    from ExchangeRate er
    JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
      JOIN ExchangeRate er2 on er.InExchangeRateId = er2.InExchangeRateId
  inner join (
     select wc.CurrencyCode, max(er.EDate) as MaxDate
       from ExchangeRate er
       JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
     group by wc.CurrencyCode
    ) erm on wc.CurrencyCode = erm.CurrencyCode and er.EDate = erm.MaxDate)b

我不明白你為什么要這樣做,這是一個不知道 ExchangeRate 表的長期目標。 但這應該可以滿足您的要求

select er.Rate, 
wc.CurrencyCode + ' ' + wc.Descr as [Currency], 
er.EDate as [Exchange Date], ISNULL(wc.MonSymbol, ' ') AS [Symbol], 
er2.Rate as [Rate2],

erEur.Rate/erUsd.Rate as [EUR/USD]

from ExchangeRate er
JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
JOIN ExchangeRate er2 on er.InExchangeRateId = er2.InExchangeRateId
JOIN ExchangeRate erUsd on er.EDate = erEUR.Edate and erEUR.CurrencyCode = 'USD'
JOIN ExchangeRate erEur on er.EDate = erEUR.Edate and erEUR.CurrencyCode = 'EUR'
inner join (
    select wc.CurrencyCode, max(er.EDate) as MaxDate
    from ExchangeRate er
    JOIN WorldCurrency wc on er.ExCurrencyId = WC.InCurrencyId
    group by wc.CurrencyCode
) erm on wc.CurrencyCode = erm.CurrencyCode and er.EDate = erm.MaxDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM