Sql 将表列透视到具有主键-外键关系的行中
表1: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
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. . . 现在检查一下,谢谢你。