SQL Как прочитать группировку записей и вывести меньшую таблицу на основе прочитанных значений?
Я пытаюсь прочитать группу записей о студентах (на основе их идентификатора штата) и определить, сделали ли они список почета или высокие награды. Если они не достигли, целые записи могут быть удалены для этой группы stateID. Это то, что я придумал, чтобы пройти через ряды:
Код должен читать каждую запись, как StateID.
Если он видит "N/A" в столбце C, удалите все записи для этого StateID. Студент не сделал почетный листок.
Если он видит комбинацию "H" и "HH", выведите столбец идентификатора состояния, а в столбце "Honors" - значение "H".
Если он видит все значения '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