【问题标题】:Added first column in Select Case SQL, can't get the second to stay在 Select Case SQL 中添加了第一列,无法保留第二列
【发布时间】:2016-06-06 14:31:14
【问题描述】:

尝试自学 SQL,并使用第一条语句正确更新了此表,并且 OFF_DIVISION 列保留在 Temp_NFL2015 表中。

SELECT *, case when OffenseTeam in ('BUF', 'MIA', 'NYJ','NE') then 'AFC EAST' 
when OffenseTeam in ('BAL','CIN','CLE','PIT') THEN 'AFC NORTH'
when OffenseTeam in ('HOU','IND','JAC','TEN') THEN 'AFC SOUTH'
when OffenseTeam in ('DEN','KC','OAK','SD') THEN 'AFC WEST'
when OffenseTeam in ('DAL','NYG','PHI','WAS') THEN 'NFC EAST'
when OffenseTeam in ('CHI','DET','MIN','GB') THEN 'NFC NORTH'
when OffenseTeam in ('ATL','CAR','NO','TB') THEN 'NFC SOUTH'
when OffenseTeam in ('ARI','STL','SEA','SF') THEN 'NFC WEST' END AS OFF_DIVISION
INTO nfl.dbo.Temp_NFL2015
from NFL2015$

现在我在 Temp_NFL2015 中有一个名为 OFF_Division 的工作列。当我从表中选择 * 时,表将列保留在其中。

但我现在在创建 DEF_Division 列时遇到问题。如果我运行下面的代码,我会得到我想要的结果,但该列不会永久保留在表中。我尝试使用INTO,但没有奏效。如何将以下结果永久保存到表格中?谢谢你

SELECT *, case when DefenseTeam in ('BUF', 'MIA', 'NYJ','NE') then 'AFC EAST' 
when DefenseTeam in ('BAL','CIN','CLE','PIT') THEN 'AFC NORTH'
when DefenseTeam in ('HOU','IND','JAC','TEN') THEN 'AFC SOUTH'
when DefenseTeam in ('DEN','KC','OAK','SD') THEN 'AFC WEST'
when DefenseTeam in ('DAL','NYG','PHI','WAS') THEN 'NFC EAST'
when DefenseTeam in ('CHI','DET','MIN','GB') THEN 'NFC NORTH'
when DefenseTeam in ('ATL','CAR','NO','TB') THEN 'NFC SOUTH'
when DefenseTeam in ('ARI','STL','SEA','SF') THEN 'NFC WEST' END AS DEF_DIVISION

from nfl.dbo.Temp_NFL2015

【问题讨论】:

  • 您指的是哪个 RDMS?

标签: sql sql-server select case


【解决方案1】:

您应该首先将列添加到实际表中,您并没有真正创建它,您只是选择它,它仅在查询期间可用(除非您将其保存在某个位置)

所以,对于 ANSI-Sql,因为您没有提供任何 DBMS:

ALTER TABLE nfl.dbo.Temp_NFL2015
ADD DEF_Division VARCHAR(30)

然后根据你的逻辑更新:

UPDATE nfl.dbo.Temp_NFL2015
SET DEF_Devision = case when DefenseTeam in ('BUF', 'MIA', 'NYJ','NE') then 'AFC EAST' 
                        when DefenseTeam in ('BAL','CIN','CLE','PIT') THEN 'AFC NORTH'
                        when DefenseTeam in ('HOU','IND','JAC','TEN') THEN 'AFC SOUTH'
                        when DefenseTeam in ('DEN','KC','OAK','SD') THEN 'AFC WEST'
                        when DefenseTeam in ('DAL','NYG','PHI','WAS') THEN 'NFC EAST'
                        when DefenseTeam in ('CHI','DET','MIN','GB') THEN 'NFC NORTH'
                        when DefenseTeam in ('ATL','CAR','NO','TB') THEN 'NFC SOUTH'
                        when DefenseTeam in ('ARI','STL','SEA','SF') THEN 'NFC WEST' END 

【讨论】:

  • 效果很好。感谢您帮助我更好地理解这一点。我认为 Alter Table 与它有关,现在我明白了。
【解决方案2】:

您可以在第一个 sql 语句中同时使用两个 case 语句,以获得比 alter table / update 方法更好的性能。我个人的偏好通常是有一个包含 TeamAbbr 和 ConfAbbr 的表格,我会加入两次,一次用于进攻,一次用于防守。

【讨论】:

  • 感谢您的提示。我今晚要加入,还没到那一步!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2021-08-23
  • 2022-12-17
相关资源
最近更新 更多