将表列转换为具有主键外键关系的行

时间:2018-05-23 16:46:24

标签: sql sql-server tsql

表1

  Columns     PK_Table1   Name | DoYouGoToSchool |DoYouhaveACar |DoYouWorkFullTime | DoYouWorkPartTime  |  Score
                1          joe     Yes               Yes              No                   Yes   
                2          amy     No                Yes              Yes                  No    

如何将其转换并插入具有唯一ID的新Table2(PK_table1映射到FK_Table1)

表2中的预期结果,我正在寻找的是 FK_Tablel1 维持与Table1的关系

enter image description here

正如您所看到的,结果遵循Pivoted Columns行,并保持将FK&#39插入表中的PK-FK关系。

以下是我正在玩的查询:

create table #Table1
(
    PK_Table1         int IDENTITY, 
    Name              Varchar(50), 
    DoYouGoToSchool   Varchar(8),
    DoYouhaveACar     Varchar(8),
    DoYouWorkFullTime Varchar(8),
    DoYouWorkPartTime Varchar(8),
    Score             int null,
)

create table #Table2
(
    PK_Table2 int IDENTITY,
    FK_Table1 int null,
    Questions Varchar(50),   
    Answer    Varchar(8)
)

INSERT INTO #Table1 (Name, DoYouGoToSchool, DoYouhaveACar, DoYouWorkFullTime, DoYouWorkPartTime)
VALUES ('joe', 'Yes', 'Yes', 'No', 'Yes'), 
       ('amy', 'NO', 'Yes', 'Yes', 'No')

1 个答案:

答案 0 :(得分:0)

我们也可以使用UnPivot

INSERT INTO #Table2 (FK_Table1, Questions, Answer)

 SELECT  PK_Table1 AS FK_Table1
        ,Questions
        ,Answers 
 FROM #Table1 t
 UNPIVOT
 (
 Answers FOR Questions IN ([DoYouGoToSchool],[DoYouhaveACar],[DoYouWorkFullTime],[DoYouWorkPartTime])
 ) AS unpvt
 WHERE PK_Table1<3