我发现用音乐家解释比用我的实际数据更容易。 每个音乐家都有一个ID,用于他们的名字和乐器。
Select ID, NAME, PARAM FROM TABLE
当前结果
ID NAME PARAM
911 John Name
911 Guitar Instr 1
911 Piano Instr 2
912 Paul Name
912 Bass Instr 1
912 Piano Instr 2
912 Guitar Instr 3
913 Freddie Name
913 Piano Instr 1
913 Guitar Instr 2
914 Brian Name
914 Guitar Instr 1
我想添加一个专栏' Band'我需要从ID&#39开始创建
通缉结果
ID NAME PARAM BAND
911 John Name B
911 Guitar Instr 1 B
911 Piano Instr 2 B
912 Paul Name B
912 Bass Instr 1 B
912 Piano Instr 2 B
912 Guitar Instr 3 B
913 Freddie Name Q
913 Piano Instr 1 Q
913 Guitar Instr 2 Q
914 Brian Name Q
914 Guitar Instr 1 Q
答案 0 :(得分:3)
查询将为您提供所需的结果:
select id,
name,
param,
case when id in (911,912) then 'B' when id in (913,914) then 'Q' end [Band]
from MY_TABLE
现在,如果您愿意,可以CREATE VIEW
create view v_tableWithBand as
select id,
name,
param,
case when id in (911,912) then 'B' when id in (913,914) then 'Q' end [Band]
from MY_TABLE
将结果存储在临时表中:
select id,
name,
param,
case when id in (911,912) then 'B' when id in (913,914) then 'Q' end [Band]
into #tempTableWithBand
from MY_TABLE
或表变量:
declare @tableWithBand table (id int, name varchar(100), param varchar(100), band char(1))
insert into @tableWithBand
select id,
name,
param,
case when id in (911,912) then 'B' when id in (913,914) then 'Q' end [Band]
from MY_TABLE
并查询此数据。
答案 1 :(得分:2)
使用case
表达式:
select *,
(case when ID in (911, 912)
then 'B'
when ID in (913, 914)
then 'Q'
end) as BAND
from table t;
答案 2 :(得分:2)
您的数据不是3NF
我知道打破桌子看起来很痛苦但是有效。例如,如果乐队名称发生变化,您可以在一个位置进行更改。音乐家可以在多个乐队中。
Musician
ID int PK
Name varchar(200)
Instrument
ID int PK
Name varchar(200)
MusicianInstrument
musician in FK
insturment int FK
composite PK
Band
ID int PK
Name varchar(200)
MusicianBand
musician int FK
band int FK
select m.Name, i.Name, b.Name
from Musician m
left join MusicianInsturment mi
on mi.Musician = m.ID
left join Insturment i
on i.ID = mi.Insturment
left join MusicianBand mb
on mb.Musician = m.ID
left join Band b
on b.ID = mb.Band