Я новичок в мире ORACLE SQL.Я пытаюсь найти способ рассчитать что-то, как показано ниже.
Допустим, у меня есть следующие данные, доступные в таблице «А».Статус создается по другой логике, просто для простоты я беру пример статуса.
Name Status
---------------------------
John N
John Y
Smith N
Karrie Y
Walter N
Smith Y
Walter N
John N
Walter N
Karrie Y
Теперь я хочу вывести что-то, как показано ниже:
Name Status Flag
-----------------------------------------------
John N S
John Y S
John N S
Smith N S
Smith Y S
Karrie Y Y
Karrie Y Y
Walter N N
Walter N N
Walter N N
Это простопример данных и пример выходных данных.
В основном, давайте возьмем пример Джона:
- Если доступно 3 Джона с несколькими N и хотя бы одним Y', тогда я хочу, чтобы флаг был' S '.
- Если доступно 3 Джона, имеющих несколько' N 'и Нет ' Y ', тогда я хочу, чтобы флаг был'N '.
- Если доступно 3 Джона с несколькими буквами' Y 'и Нет ' N ', тогда я хочу, чтобы флаг был' Y '.
Я попробовал это, добавив дополнительный столбец в качестве количества *, который разбивает таблицу на Имя и подсчитывает все имена в ней.Что в конечном итоге скажет мне «Сколько« Y »и« N »может быть там!».
Но, даже если я посчитаю все эти Имена, я не смогу разделить «Y» и «N»)..
Не уверен, как мне добиться этого с помощью чистого SQL.
Я знаю, что
If COUNT('N') = COUNT('John') then
flag = 'N'
else if COUNT('N') < COUNT('John') then
flag = 'S'
else flag = 'Y'.
Это то, что я пробовал:
SELECT a.NAME
, a.status
, COUNT(NAME) OVER (PARTITION BY NAME ORDER BY NAME) COUNT
FROM A a;
Я застрял после этого.
Не могли бы вы мне помочь?
Это мой ожидаемый результат:
Name Status Flag
-----------------------------------------------
John N S
John Y S
John N S
Smith N S
Smith Y S
Karrie Y Y
Karrie Y Y
Walter N N
Walter N N
Walter N N