Сводить столбцы таблицы в строки с отношением внешнего ключа первичного ключа - PullRequest
0 голосов
/ 23 мая 2018

Table1 :

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

Как мне повернуть это и вставить в новый Table2 с его уникальным идентификатором (PK_table1, сопоставленный с FK_Table1)

Ожидаемый результат вТаблица 2, то, что я ищу, это FK_Tablel1 , поддерживающая его связь с Таблицей1

enter image description here

Как видно из приведенного ниже результата,Pivoted Columns в строки и поддерживает отношение 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')

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

мы также можем использовать 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
0 голосов
/ 23 мая 2018

Просто используйте оператор 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...