sql查询按3列分组的表,并选择不同列的不同值

时间:2017-09-20 10:22:00

标签: sql sql-server

以下是我的情况:我将CurrecnyExchange Rates从不同的银行下载到我的数据库。我想过滤行以查看ExchangeRates与特定日期的银行是否与所有货币组合不同以下是我的表

enter image description here

2 个答案:

答案 0 :(得分:1)

如果您希望拥有多种不同货币的天数,则可以使用:

select fromid, toid, effdate, count(distinct exchangerate)
from t
group by fromid, toid, effdate
where count(distinct exchangerate) > 0;

答案 1 :(得分:0)

此查询将转置您的数据,对于您将从一行中的所有银行ExchangeRate获得的每个日期:

select FromID, ToID, EffDate,
       max(case when BankID = 1 then ExchangeRate end) AS ExRateBank1,
       max(case when BankID = 2 then ExchangeRate end) AS ExRateBank2,
       max(case when BankID = 3 then ExchangeRate end) AS ExRateBank3
from CurrencyExchange --assumed name, pleasy correct it if not correct
group by FromID, ToID, EffDate

如果您只想要费率不同的行,我建议您点击查询:

select * from (*)
where ExRateBank1 - ExRateBank2 != 0 or ExRateBank1 - ExRateBank3 != 0 or ExRateBank3 - ExRateBank2 != 0

代替*,您粘贴上一个查询(作为子查询)。