SQL 如何读取一组记录并根据读取的值输出更小的 table?

SQL How to read through a grouping of records and output a smaller table based on the values read?

我正在尝试通读一组学生的记录(基于他们的 stateID)并确定他们是否进入了荣誉榜或高等荣誉。如果它们都没有达到,则可以删除该组 stateID 的整个记录​​。这就是我想出的关于遍历行的步骤:

  1. 代码需要像StateID一样读取每条记录。

  2. 如果在 C 列中看到 'N/A',则删除该 StateID 的所有记录。该学生没有进入荣誉榜。

  3. 如果它看到 'H' 和 'HH' 的组合,则输出状态 ID 列,并在荣誉列中输出 'H'[=14 的值=]

  4. 如果它看到所有 'HH' 值,输出 stateID 列和 honors 列,'HH' 的值。

这里是要读取的数据的例子:

Image of sample data

Image of sample desired output

这是我会做的。我使用 Temp table 进行说明。我将样本数据用于演示并得到了预期的结果。

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