あなたの要件は正確には明確ではありませんが、次のようなものを使用できるようです:
select o.id,
o.orderid,
o.currency,
o.cost
from orders o
inner join
(
select orderid, currency,
CountCurrency,
max(CountCurrency) over(partition by orderid) mx
from
(
select orderid, currency, count(currency) CountCurrency
from orders
group by orderid, currency
) o
) m
on o.orderid = m.orderid
and o.currency = m.currency
where m.CountCurrency = m.mx
order by o.orderid, o.id
デモで SQL Fiddle を参照してください
これにより、 で最も多く表示される通貨を含むすべての行が返されorderid
ます。サンプル データの使用:
CREATE TABLE orders
([id] int, [orderid] int, [currency] varchar(3), [cost] int)
;
INSERT INTO orders
([id], [orderid], [currency], [cost])
VALUES
(1, 10, 'USD', 1000),
(2, 10, 'EUR', 522),
(3, 10, 'USD', 999),
(4, 10, 'INR', 999),
(5, 20, 'TST', 557),
(6, 25, 'GRB', 24),
(7, 20, 'TST', 78),
(8, 30, 'HYT', 3)
;
結果は次のとおりです。
| ID | ORDERID | CURRENCY | COST |
----------------------------------
| 1 | 10 | USD | 1000 |
| 3 | 10 | USD | 999 |
| 5 | 20 | TST | 557 |
| 7 | 20 | TST | 78 |
| 6 | 25 | GRB | 24 |
| 8 | 30 | HYT | 3 |