1

SQL Server(2008)に次のテーブルがあるとします。

Person

|PersonID|NickName|FirstName|LastName|
|1       |Jim     |James    |Leahy   |
|2       |Mike    |Michael  |Ross    |
|3       |Bob     |Robert   |Helberg |

SQLで次のことが可能かどうか知りたいです。NickNameメインテーブルがあり、と列に基づいて別のテーブルで一致するものを見つけたいと思いFirstNameます。ただし、特定の順序で列を結合する必要があります。

下の表の識別子と一致する上(NickNameまたは)の最初の列に参加したいFirstName

|Identifier|PersonId|
|Jim       |1       | <- should return PersonId = 1
|Michael   |2       | <- should return PersonId = 2

したがって、一致するものがある場合はNickName、行を選択します。一致するものがない場合はNickName、を見てくださいFirstName

特定の順序NickNameで列をクエリできる方法はありますか?FirstName

COALESCEいずれかの列が一致することが保証されていないため、機能しないと思いますNULL。代わりに、列で一致が発生しない可能性があることだけを知っています。

説明が必要な場合はお知らせください。私はこれをうまく表現しなかったかもしれません。

4

1 に答える 1

1

メインテーブルのスキーマを指定しなかったので、またはのいずれかIdentifier varchar(100)を含むことができるフィールドがあると思います。この場合、クエリは次のようになります。nicknamefirstname

select m.identifier, 
PersonId = isnull(p1.PersonID,p2.PersonID)
from maintable m
left join persons p1 on p1.nickname = m.identifier
left join persons p2 on p2.firstname = m.identifier
于 2013-02-07T05:10:23.970 に答える