SQL Сервер: нужна помощь, чтобы написать то, что я считаю простым кодом - PullRequest
0 голосов
/ 05 марта 2020

У меня есть простая таблица:

id    id_fk    default
--    -----    -------
 1        1          T
 2        1          F
 3        2          T
 4        3          T
 5        3          F

Я хотел бы вернуть одну строку для каждого id_fk. Если по умолчанию установлено значение T, верните его. Если их нет по умолчанию T, тогда вернуть значение по умолчанию F.

Это кажется достаточно простым, но я боролся.

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Есть несколько способов сделать это. Один из возможных способов - использовать для этого функцию row_number ():

select a.*
from
(select x.*,
        row_number() over(partition by x.id_fk order by x.Default desc) as rownum1
from table x) a
where a.rownum1=1
1 голос
/ 05 марта 2020

Один из вариантов - фильтрация с коррелированным подзапросом:

select t.*
from mytable t
where t.id = (
    select top(1) t1.id 
    from mytable t1 
    where t1.id_fk = t.id_fk
    oder by t1.default desc, t1.id
)

. Это создает одну запись для каждого id_fk: приоритет отдается записи, которая имеет 'T' как default, а затем до самых маленьких id.

0 голосов
/ 05 марта 2020
SELECT id_fk, MAX(default) As default
FROM SimpleTable
GROUP BY id_fk
...