これは私のSQLビューです-それをMyViewと呼びましょう:
ECode SHCode TotalNrShare CountryCode Country 000001 +00010100UKI英国 000001 ABENSO900USA米国 000355 +000121000ESPスペイン 000355 00001050FRAフランス 000042 00999910GERドイツ 000042 +00012999ESPスペイン 000787 ABENSO500USAアメリカ合衆国 000787 000150500ITAイタリア 001010 009999100GERドイツ
各ECodeのTotalNrShare列の数値が最も大きい単一の行を返したいと思います。
たとえば、上記のビューからこれらの結果を返したいと思います。
ECode SHCode TotalNrShare CountryCode Country 000001 ABENSO900USA米国 000355 +000121000ESPスペイン 000042 +00012999ESPスペイン 000787 ABENSO500USAアメリカ合衆国 001010 009999100GERドイツ
(それぞれ500のSHCodeが2つあるECode 000787の場合、両方ではなく最初の行を返すことができるので、どちらの行が返されるかは重要ではありません。これは非常にまれであり、私の分析は100%である必要はありません)
さまざまなことを試しましたが、unqiueの結果、または必要な追加の国コード/国情報を返すことができないようです。
これは私の試みの1つです(このサイトの他のソリューションに基づいていますが、私は何か間違ったことをしています):
SELECT tsh.ECode, tsh.SHCode, tsh.TotalNrShare, tsh.CountryCode, tsh.Country
FROM dbo.MyView AS tsh INNER JOIN
(SELECT DISTINCT ECode, MAX(TotalNrShare) AS MaxTotalSH
FROM dbo.MyView
GROUP BY ECode) AS groupedtsh ON tsh.ECode = groupedtsh.ECode AND tsh.TotalNrShare = groupedtsh.MaxTotalSH