WITH MonthlyAverageExchangeRates AS (
SELECT
month,
'USD' AS From_Currency,
To_Currency,
USD * Rate AS AVG_AMOUNT
FROM (
SELECT
month,
AVG(USD) AS USD,
AVG(CHF) AS CHF,
AVG(EUR) AS EUR,
AVG(GBP) AS GBP,
AVG(AUD) AS AUD,
AVG(HKD) AS HKD,
AVG(CNY) AS CNY,
AVG(CAD) AS CAD,
AVG(INR) AS INR,
AVG(JPY) AS JPY,
AVG(NZD) AS NZD,
AVG(MXN) AS MXN,
AVG(SEK) AS SEK,
AVG(PLN) AS PLN,
AVG(NOK) AS NOK,
AVG(CRC) AS CRC,
AVG(SGD) AS SGD,
AVG(AED) AS AED,
AVG(ZAR) AS ZAR,
AVG(BRL) AS BRL,
AVG(CLP) AS CLP,
AVG(DKK) AS DKK,
AVG(KRW) AS KRW,
AVG(ILS) AS ILS,
AVG(TRY) AS TRY,
AVG(GTQ) AS GTQ,
AVG(DOP) AS DOP,
AVG(HNL) AS HNL,
AVG(PEN) AS PEN,
AVG(PHP) AS PHP,
AVG(THB) AS THB,
AVG(MYR) AS MYR,
AVG(RSD) AS RSD
FROM
google_sheets.runway_xe_fx
GROUP BY
month
) UNPIVOT (
Rate FOR To_Currency IN (
CHF, EUR, GBP, AUD, HKD, CNY, CAD, INR, JPY, NZD, MXN, SEK, PLN, NOK,
CRC, SGD, AED, ZAR, BRL, CLP, DKK, KRW, ILS, TRY, GTQ, DOP, HNL, PEN,
PHP, THB, MYR, RSD
)
)
),
EndOfMonthExchangeRates AS (
SELECT
month,
'USD' AS From_Currency,
To_Currency,
USD * Rate AS EOM_AMOUNT
FROM (
SELECT
month,
max_by(day, day) day,
max_by(USD, day) USD,
max_by(CHF, day) CHF,
max_by(EUR, day) EUR,
max_by(GBP, day) GBP,
max_by(AUD, day) AUD,
max_by(HKD, day) HKD,
max_by(CNY, day) CNY,
max_by(CAD, day) CAD,
max_by(INR, day) INR,
max_by(JPY, day) JPY,
max_by(NZD, day) NZD,
max_by(MXN, day) MXN,
max_by(SEK, day) SEK,
max_by(PLN, day) PLN,
max_by(NOK, day) NOK,
max_by(CRC, day) CRC,
max_by(SGD, day) SGD,
max_by(AED, day) AED,
max_by(ZAR, day) ZAR,
max_by(BRL, day) BRL,
max_by(CLP, day) CLP,
max_by(DKK, day) DKK,
max_by(KRW, day) KRW,
max_by(ILS, day) ILS,
max_by(TRY, day) TRY,
max_by(GTQ, day) GTQ,
max_by(DOP, day) DOP,
max_by(HNL, day) HNL,
max_by(PEN, day) PEN,
max_by(PHP, day) PHP,
max_by(THB, day) THB,
max_by(MYR, day) MYR,
max_by(RSD, day) RSD
FROM
google_sheets.runway_xe_fx
GROUP BY
month
) UNPIVOT (
Rate FOR To_Currency IN (
CHF, EUR, GBP, AUD, HKD, CNY, CAD, INR, JPY, NZD, MXN, SEK, PLN, NOK,
CRC, SGD, AED, ZAR, BRL, CLP, DKK, KRW, ILS, TRY, GTQ, DOP, HNL, PEN,
PHP, THB, MYR, RSD
)
)
)
SELECT
avg_rates.month,
concat_ws(' - ', avg_rates.from_currency, avg_rates.to_currency) AS exchange,
avg_rates.from_currency,
avg_rates.to_currency,
avg_rates.AVG_AMOUNT,
eom_rates.EOM_AMOUNT
FROM
MonthlyAverageExchangeRates AS avg_rates
JOIN
EndOfMonthExchangeRates AS eom_rates
ON
avg_rates.month = eom_rates.month
AND avg_rates.from_currency = eom_rates.from_currency
AND avg_rates.to_currency = eom_rates.to_currency
UNION ALL
SELECT DISTINCT
avg_rates.month,
'USD - USD' AS exchange,
'USD' AS from_currency,
'USD' AS to_currency,
1.0 AS AVG_AMOUNT,
1.0 AS EOM_AMOUNT
FROM MonthlyAverageExchangeRates avg_rates;