SQL CASE или нет?

Я пытаюсь создать базу данных, которая содержит информацию о клиенте, информацию о встречах, заметках и т. д., поскольку мы являемся консультационной службой, если вы пропустите (днк) 3 сеанса, вы технически отстранены от нашего сервиса, и я хочу, чтобы автоматизировать этот процесс - помогите, я новичок-самоучка, я пытаюсь сделать это, используя "SELECT CASE", но понятия не имею, здесь

id | nhi    | service | type | length | contactdate | notes
1  |PEB8132 | aod     | t32  | 20     | 2012-11-20  | notes go here

Это моя таблица, когда они не посещают, длина становится днк, и именно это я хочу использовать, чтобы пометить после 3 неудачных попыток.

2 ответа

Решение

Этот работает в Oracle.

select nhi ,sum(case when length='dna' then 1 else 0 end) dna_count 
from table 
group by nhi  
having sum(case when length='dna' then 1 else 0 end)>3;

Вы хотите сгруппировать всех людей, у которых есть [длина] = 'днк', показывая количество их днк.

Вы также хотите ограничить его 'dna' > 3, но вы не можете использовать агрегаты в WHERE оговорка, поэтому мы используем HAVING,

Вы можете добавить больше столбцов к вашему SELECT заявление, но вам также нужно будет добавить их в GROUP BY,

SELECT nhi, count([length]) AS dna
FROM yourTable
WHERE [length] = 'dna'
GROUP BY nhi
HAVING count([length]) > 3

Если вы хотите вернуть все записи, а не только те, где [length] = 'dna', вы можете использовать CASE.

SELECT nhi, SUM(CASE WHEN [length]='dna' THEN 1 ELSE 0 END) AS dna
FROM yourTable
GROUP BY nhi

Это предполагает nhi это идентификатор пользователя, который как вы идентифицируете человека.

Дополнительное чтение: GROUP BY, HAVING

Другие вопросы по тегам