2015-12-07 16 views
0

我想通讀一組學生記錄(根據他們的stateID),並確定他們是否榮獲榮譽榜或高榮譽。如果他們沒有到達,那麼可以刪除該組stateID的整個記錄​​。這是我想出的步驟來通過行:SQL如何讀取一組記錄並根據讀取的值輸出一個較小的表?

  1. 該代碼需要通過像StateID讀取每條記錄。

  2. 如果在C列中看到'N/A',則刪除該StateID的所有記錄。這名學生沒有成爲榮譽榜。

  3. 如果它看到「H」的組合和「HH」,輸出狀態ID欄,並在榮譽列中,值「H」

  4. 如果它看到所有「HH」值,輸出stateID列和honors列,值爲'HH'。

這裏是要讀取的數據的一個例子:

Image of sample data

Image of sample desired output

+0

看起來我滴加步驟3的一些文本 - 如果它看到「H」和「HH」,輸出的SATE ID列的組合,並且在榮譽列中,「H」的值。 – Karen

回答

0

這裏是我會做什麼。我用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 
+0

我完全忘記了臨時表!我有更多的數據需要處理和操作,但是你的方向正是我所期待的。非常感謝你! – Karen

+0

很高興我能幫到你 – BHR

相關問題