Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将表列透视到具有主键-外键关系的行中_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 将表列透视到具有主键-外键关系的行中

Sql 将表列透视到具有主键-外键关系的行中,sql,sql-server,tsql,Sql,Sql Server,Tsql,表1: Columns PK_Table1 Name | DoYouGoToSchool |DoYouhaveACar |DoYouWorkFullTime | DoYouWorkPartTime | Score 1 joe Yes Yes No Yes 2 amy

表1

  Columns     PK_Table1   Name | DoYouGoToSchool |DoYouhaveACar |DoYouWorkFullTime | DoYouWorkPartTime  |  Score
                1          joe     Yes               Yes              No                   Yes   
                2          amy     No                Yes              Yes                  No    
如何将其旋转并插入具有唯一Id的新表2中(PK_表1映射到FK_表1)

在表2中的预期结果中,我想要的是FK_表1保持与表1的关系

如您所见,结果将数据透视列按行显示,并保持PK-FK关系,将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')

只需将
insert
语句与
apply
运算符一起使用即可:

insert into #Table2 (FK_Table1, Questions, Answer)
select t.PK_Table1, t1.cols, colsval
from #Table1 t cross apply 
        (values ('DoYouGoToSchool', DoYouGoToSchool), 
                ('DoYouhaveACar', DoYouhaveACar), 
                ('DoYouWorkFullTime', DoYouWorkFullTime), 
                ('DoYouWorkPartTime', DoYouWorkPartTime)
        ) t1 (cols, colsval);

我们也可以使用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
插入#表2(FK#U表1,问题,答案)
选择PK_表1作为FK_表1
,问题
,答案
从#表1 t
UNPIVOT
(
([DoYouGoToSchool]、[DoYouhaveACar]、[DoYouWorkFullTime]、[DoYouWorkPartTime]中问题的答案
)作为unpvt

WHERE PK_Table1非常感谢我知道你的答案是正确的对不起,但是你知道如何让答案栏填充其各自的值吗?我添加了屏幕截图。我可以对该栏进行单独更新,但我想知道我是否可以在单个查询中进行更新。感谢you@user3920526. . . 现在检查一下,谢谢你。