Запись SQL Просмотр / запрос сервера, который принимает другой объединенный / сгенерированный столбец - PullRequest
0 голосов
/ 05 февраля 2020

Используя SQL Server 2017, у меня есть более или менее следующие структуры данных:

+------------+
|   Users    |
+------------+
| pk: UserID |
| ...        |
| ...        |
+------------+

+---------------+
|   Addresses   |
+---------------+
| pk: AddressId |
| AddressCode   |
| ...           |
| ...           |
+---------------+

+-------------------+
|   AddressTypes    | (Currently just 4 entries 1,2,3,4)
+-------------------+
| pk: AddressTypeId |
| Description       |
+-------------------+

+-------------------+
|   UserAddresses   |
+-------------------+
| fk: UserId        |
| fk: AddressId     |
| fk: AddressTypeId |
+-------------------+

Что бы я хотел, чтобы запрос возвращался, это UserId, AddressCode со следующим условием. Я хочу, чтобы запрос вернул мне AddressCode, который имеет AddressTypeId 4. Но если AddressTypeId 4 не существует, AddressCode, который имеет AddressTypeId 3, если он снова не существует, AddressTypeId 2, если он снова не существует, AddressTypeId 1 .

Буду признателен, если кто-нибудь сможет помочь.

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете использовать ROW_NUMBER(), чтобы найти самый высокий тип, а затем просто отфильтровать остальные, как в:

select
  userid,
  addresscode
from (
  select
    ua.userid,
    a.addresscode,
    row_number() over(partition by ua.userid order by ua.addresstype desc) as rn
  from useraddresses ua
  join addresses a on a.addressid = ua.addressid
) x
where rn = 1
...