SQL Как прочитать группировку записей и вывести меньшую таблицу на основе прочитанных значений?

Я пытаюсь прочитать группу записей о студентах (на основе их идентификатора штата) и определить, сделали ли они список почета или высокие награды. Если они не достигли, целые записи могут быть удалены для этой группы stateID. Это то, что я придумал, чтобы пройти через ряды:

  1. Код должен читать каждую запись, как StateID.

  2. Если он видит "N/A" в столбце C, удалите все записи для этого StateID. Студент не сделал почетный листок.

  3. Если он видит комбинацию "H" и "HH", выведите столбец идентификатора состояния, а в столбце "Honors" - значение "H".

  4. Если он видит все значения 'HH', выведите столбец stateID и столбец honors, значение 'HH'.

Вот пример данных для чтения:

Изображение образца данных

Изображение образца желаемого выхода

1 ответ

Решение

Вот что я бы сделал. Я использовал таблицу Temp для иллюстрации. Я положил пример данных для демонстрации и получил желаемый результат.

CREATE TABLE #TempTable (StateId varchar(5) ,Honors varchar(5)) 
INSERT INTO #TempTable(StateId, Honors)
values('AA', 'HH'), ('AA', 'N/A'), ('AA', 'N/A'), ('FFB', 'H'),
('FFB', 'HH'), ('BCE', 'N/A'), ('BCE', 'H'), ('AOR', 'H'), ('AOR','H'), ('EEE','N/A'), ('EEE','N/A'), ('YTI','HH'), ('YTI','HH')

-- delete all N/A records
DELETE FrOM #TempTable
where STateId in (select Distinct StateId from #TempTable
where Honors = 'N/A')

-- update HH and H to be H
update #TempTable
set Honors = 'H' 
where StateId in (select Distinct StateId from #TempTable
where Honors = 'H')

select Distinct *  from #TempTable

DROP TABLE #TempTable 
Другие вопросы по тегам