制御できないソースからのコードと名前を含む醜いテーブルがあります。これは次のようなものです (OriginalTable):
Code | Name
--------------------
001-001 | Name1_a
001-002 | Name1_a
001-002 | Name1_b
001-003 | Name1_a
002-001 | Name2_a
002-001 | Name2_b
002-002 | Name2_a
003-001 | Name3
...
問題は、次の表のように、各コード (SmallCode) の最初の 3 桁に一意の名前が必要なことです。
Id | Code | Name
--------------------
1 | 001 | NameX
2 | 002 | NameY
3 | 003 | NameZ
名前を選択するために使用したい基準は、それが最も繰り返される名前か、各 SmallCode の最初の名前であることです。たとえば、NameX は、001 または最初のコード (どちらの場合も Name1_a) で始まるすべてのコードの中で最も繰り返される名前です。002 の NameY と 003 の NameZ も同様です。
今、私はこのクエリを使用していました:
select Substring(Code,1,3) as SmallCode, Code, Name
into #tmpCode
from OriginalTable
select SmallCode, Min(Code) as Code
into #tmpReducedCode
from #tmpCode
group by SmallCode
insert into ResultTable (Code, Name)
select a.SmallCode, a.Name
from #tmpCode a
inner join #tmpReducedCode b
on a.Code = b.Code
しかし、これは私の結果であり、コード 002-001 には 2 つの異なる名前 (Name2_a、Name2_b) があるため、間違っています。
1 | 001 | Name1_a
2 | 002 | Name2_a
3 | 002 | Name2_b
4 | 003 | Name3
問題は、OriginalTable を 2 つのテーブルに分割して、小さなコードごとに最も繰り返される名前または最初に表示される名前を選択するにはどうすればよいかということです。