SQL 如何读取一组记录并根据读取的值输出更小的 table?
SQL How to read through a grouping of records and output a smaller table based on the values read?
我正在尝试通读一组学生的记录(基于他们的 stateID)并确定他们是否进入了荣誉榜或高等荣誉。如果它们都没有达到,则可以删除该组 stateID 的整个记录。这就是我想出的关于遍历行的步骤:
代码需要像StateID一样读取每条记录。
如果在 C 列中看到 'N/A',则删除该 StateID 的所有记录。该学生没有进入荣誉榜。
如果它看到 'H' 和 'HH' 的组合,则输出状态 ID 列,并在荣誉列中输出 'H'[=14 的值=]
如果它看到所有 'HH' 值,输出 stateID 列和 honors 列,'HH' 的值。
这里是要读取的数据的例子:
这是我会做的。我使用 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
我正在尝试通读一组学生的记录(基于他们的 stateID)并确定他们是否进入了荣誉榜或高等荣誉。如果它们都没有达到,则可以删除该组 stateID 的整个记录。这就是我想出的关于遍历行的步骤:
代码需要像StateID一样读取每条记录。
如果在 C 列中看到 'N/A',则删除该 StateID 的所有记录。该学生没有进入荣誉榜。
如果它看到 'H' 和 'HH' 的组合,则输出状态 ID 列,并在荣誉列中输出 'H'[=14 的值=]
如果它看到所有 'HH' 值,输出 stateID 列和 honors 列,'HH' 的值。
这里是要读取的数据的例子:
这是我会做的。我使用 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