1

'test_table'には、vendorという列が含まれています。char値は1〜9で、1が最高の優先度です。'test_table'には、matchという名前の別の列もあります。char値は'I'または'H'であり、'I'がより高い優先順位を受け取ります。IDに一意の値があり、一致、次にベンダーの順に優先順位が付けられたすべての行を返したい。

Test_Table

ID  Vendor  Match  
 1    3      I  
 1    2      I  
 1    4      H  
 2    1      H  
 2    1      I  
 3    1      H  
 3    2      I  

望ましい結果

ID  Vendor  Match   
1     2   I  
2     1   I   
3     2   I  


SELECT *
FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS RowNo, * 
     FROM test_table) x
WHERE RowNo = 1 
ORDER BY ID

どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

1

一致列(文字の比較はASCII値に基づいて行われます)のorder by句と、ベンダー列の別の句が必要です。asciikeyowrdを削除して(わかりやすくするために)、列名を句ごとに使用することもできます。

これを試して :

 ;With cte as 
  ( 
  Select ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ascii(match) desc ,vendor )
   AS RowNo,  Id,Vendor ,Match 
  FROM test_table
  )
  Select Id,Vendor,Match from cte
  WHERE RowNo = 1 
于 2012-07-20T06:03:55.573 に答える
1
SELECT Id,Vendor,Match
FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID,Match Desc,Vendor Asc) AS RowNo, * 
     FROM test_table ) x
WHERE RowNo = 1 
ORDER BY ID
于 2012-07-20T06:29:03.567 に答える