将多列插入映射的1-1单列

时间:2019-08-16 08:23:34

标签: sql sql-server

我在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)

2 个答案:

答案 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