4

私はテーブルを持っています

ID,  name, pay1, pay2
 1     a,    3,    2
 2     b,   12,    4
 3     b,    4,    8
 4     c,    8,    7
 5     c,    5,    2
 6     a,    7,    1

すべての名前でpay1+pay2が最小になる行を選択したいと思います。だから、私は取得したい

 ID,  name, pay1, pay2
 1     a,    3,    2
 3     b,    4,    8
 5     c,    5,    2

SQL Serverでそれを行う方法はありますか?ありがとう

4

3 に答える 3

5

ランキング機能を使用します。

with minpay as
(
  select *
    , payrank = row_number() over (partition by name order by pay1 + pay2, ID)
  from pay
)
select ID
  , name
  , pay1
  , pay2
from minpay
where payrank = 1
order by name

デモ付きのSQLフィドル

于 2013-03-16T01:23:24.723 に答える
3

OPは、可能な関係がどのように扱われるべきかについては言及していませんが、次のとおりです。

select t1.* 
from table1 t1 join
(select id, sum(pay1 + pay2) as sumpay 
from table1  
group by id) s on t1.id = s.id
join 
(select name, min(pay1 + pay2) as sumpay 
from table1 
group by name) t on t.sumpay = s.sumpay 

私はこれを投稿し、それからより明確なイアンの答えを見ました。

SQLFiddleとデモ。

于 2013-03-16T01:27:24.827 に答える
0

別のオプションがあります。

これは最小値のタイを表示します。@MitchWheatが指摘しているように、質問はそれらの処理方法を指定していません。

SELECT a.Id, a.Name, a.Pay1, a.Pay2
FROM [table] a INNER JOIN (
    SELECT Name, MIN(Pay1 + Pay2) as MinPay
    FROM [table]
    GROUP BY Name
) b ON a.Name = b.Name
    AND a.Pay1 + a.Pay2 = b.MinPay
于 2013-03-16T01:37:30.067 に答える