我在SQL Server 2016中具有以下设置。我想在表B中分别插入名称,姓氏,地址,但在视图A的3列中,我想为每一个插入一行人员,根据表B中的“就业转化为就业状况”列,这是最好的方法?
查看A
Name (String)
Surname (Sring)
Address (String)
Employed (boolean)
Non-Employed (boolean)
Retired (boolean)
表B
Name (String)
Surname (Sring)
Address (String)
Employed Status (String)
答案 0 :(得分:0)
尽管您有三个似乎互斥的标志,但我认为没有理由认为它们实际上是(除非您有某种验证)。
因此,我将这些状态连接在一起:
insert into b (name, surname, address, employed_status)
select name, surname, address,
stuff(concat(case when employeed = 1 then ', employed' else '' end,
case when non_employeed = 1 then ',non_employed' else '' end,
case when retired = 1 then ',retired' else '' end
), 1, 1, ''
)
from a;
注意:SQL Server没有布尔类型,因此我假设您对列使用0/1编码。
答案 1 :(得分:0)
我将退后一步,创建另一个表,称为“就业状态”,在其中添加三行“ 1-就业”,“ 2-失业”,“ 3-退休”。然后从表A和表B向该表添加外键。
当然,除非一个人可以处于多个状态...在这种情况下,您需要一个相交表。参见https://www.bing.com/search?q=sql+intersection+table&qs=n&form=QBRE&sp=-1&ghc=1&pq=sql+intersection+tab&sc=0-20&sk=&cvid=153E23C3D25F461E89F71E106FBF7D66