1

多かれ少なかれ同じデータを含む2つのユーザーSQLテーブルがあり、2つのテーブルをマージして、最高のユーザーのみを取得したいと考えていますMyLevel。たぶん、私が持っているものと欲しいものを見せればもっと理にかなっています.

表 1:

MyName, MyDescr, MyLevel, FromDB
John, "Hey 1", 100, DB1
Glen, "Hey 2, 100, DB1
Ive, "Hey 3, 90, DB1

表 2:

MyName, MyDescr, MyLevel, FromDB
John, "Hey 4", 110, DB2
Glen, "Hey 5", 90, DB2
Ive, "Hey 6", 90, DB2

アーカイブしたいもの (<-- は無視してください):

MyName, MyDescr, MyLevel, FromDB
John, "Hey 4", 110, DB2
Glen, "Hey 2, 100, DB1
Ive, "Hey 6", 90, DB2 <-- doesn't matter which one as it is the same level

もちろん可能ですが、JOINに関して、特にグループ化する必要がある場合など、私は本当に暗闇の中にいますか?

4

3 に答える 3

0

SQL Server に参加して、分析クエリを使用できる機会があります。
2 つのテーブルを結合して、 Level で最大値を求めるだけです。

SELECT *
FROM
(
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY MYNAME ORDER BY MYLEVEL DESC) as Rank
  FROM
  (
    SELECT * FROM TableOne t1  
    UNION
    SELECT * FROM TableTwo t2
  ) tUnion
) tRank
WHERE RANK = 1

ランキングの重複を避けるためROW_NUMBERに、代わりにを使用する必要があることに注意してください。RANK

SQLFiddle デモ

于 2013-09-30T09:16:42.307 に答える
0

問題は、ある文字列が他の文字列よりも優れていると言おうとしていることです。

数値を比較するには、何らかの方法でこれらを数値に変換する必要があります。良いスタートはsubstr(yourfieldname, n)、テキストのカットに使用することです。次に、convert を使用して int に型キャストできます。convert(int, substr(nbr, 3)) <= 10

次に、これらの値の最大値を結合して選択できます。

于 2013-09-30T09:06:26.107 に答える