Как горизонтально вставить данные в таблицу из другой таблицы, где эти данные расположены вертикально? - PullRequest
0 голосов
/ 30 января 2020

У меня есть данные в таблице, расположенные вертикально:

 FILE ID:        001                                                                                             
 RECORD 1        1111                                                                                                  
 RECORD 2        123456789012345                                                                                      
 RECORD 3        A01     11                                                                                                    
 RECORD 4        A02     11                                                                                                    
 RECORD 5        A03     11                                                                                                    
 RECORD 6                0103050                                                                                         
 RECORD 7                777                                                                                                   
 RECORD 8        A01     1                                                                                                     
 RECORD 9        A02     1                                                                                               
 RECORD 10       A03     1111                                                                                                  
 RECORD 11       A04     11111                                                                                                                                                                                                                                                                                              
 FILE ID:        002                                                                                             
 RECORD 1        2222                                                                                                  
 RECORD 2        1234567                                                                                    
 RECORD 3        A01     11                                                                                                    
 RECORD 4        A02     11                                                                                                    
 RECORD 5        A03     11                                                                                                    
 RECORD 6                0103050                                                                                       
 RECORD 7                777                                                                                                   
 RECORD 8        A01     1                                                                                                     
 RECORD 9        A02     1                                                                                                
 RECORD 10       A03     1111                                                                                                  
 RECORD 11       A04     11111                                                                                          
FILE ID:         003                                                                                            
 RECORD 1        3333                                                                                                  
 RECORD 2        1234567                                                                                     
 RECORD 3        A01     11                                                                                                    
 RECORD 4        A02     11                                                                                                    
 RECORD 5        A03     11                                                                                                    
 RECORD 6                0103050                                                                                         
 RECORD 7                777                                                                                                   
 RECORD 8        A01     1                                                                                                     
 RECORD 9        A02     1                                                                                                
 RECORD 10       A03     1111                                                                                                  
 RECORD 11       A04     11111   

Как вставить их в другую таблицу, чтобы они располагались горизонтально, следующим образом:

FileID|Record1|Record2|Record3|Record4|Record5|Record6|Record7|Record8|Record9|Record10|Record11
--------------------------------------------------------------------------------------------------
001   |1111   |1111111|A01  11|A02  11|A03  11|0103050|777    |A01   1|A02   1|A03 1111|A04 11111
002   |2222   |1234567|A01  11|A02  11|A03  11|0103050|777    |A01   1|A02   1|A03 1111|A04 11111
003   |3333   |1234567|A01  11|A02  11|A03  11|0103050|777    |A01   1|A02   1|A03 1111|A04 11111

Спасибо'S

1 Ответ

0 голосов
/ 04 марта 2020

Я немного опоздал на вечеринку, но я сделаю это. Это будет работать, только если ваши данные соответствуют идентификатору файла, за которым следуют 11 записей. Во-первых, вам нужно иметь таблицу со столбцом идентификаторов. Я бы сделал это привычкой при создании таблиц. Сделайте вашу массовую вставку в следующую таблицу. Это сохранит ваши данные с идентификаторами строк, которые будут важны позже.

CREATE TABLE [dbo].[Table_1](
    [TableId] [bigint] IDENTITY(1,1) NOT NULL,
    [Column1] [varchar](255) NULL,
    [Column2] [varchar](255) NULL
) ON [PRIMARY]
GO

Создайте эту таблицу для сводных данных.

CREATE TABLE [dbo].[Table_2](
    [Table2ID] [bigint] IDENTITY(1,1) NOT NULL,
    [FileID] [varchar](255) NULL,
    [Record1] [varchar](255) NULL,
    [Record2] [varchar](255) NULL,
    [Record3] [varchar](255) NULL,
    [Record4] [varchar](255) NULL,
    [Record5] [varchar](255) NULL,
    [Record6] [varchar](255) NULL,
    [Record7] [varchar](255) NULL,
    [Record8] [varchar](255) NULL,
    [Record9] [varchar](255) NULL,
    [Record10] [varchar](255) NULL,
    [Record11] [varchar](255) NULL
) ON [PRIMARY]
GO

Теперь, чтобы получить данные из таблицы 1 в таблицу 2. Я буду использовать выражение общей таблицы (CTE) и функцию LEAD.

WITH preselect AS
( 
    SELECT  Column1
           ,Column2 AS 'FileID'
           ,LEAD(Column2,1,0) OVER(ORDER BY TableId) AS 'Record1'
           ,LEAD(Column2,2,0) OVER(ORDER BY TableId) AS 'Record2'
           ,LEAD(Column2,3,0) OVER(ORDER BY TableId) AS 'Record3'
           ,LEAD(Column2,4,0) OVER(ORDER BY TableId) AS 'Record4'
           ,LEAD(Column2,5,0) OVER(ORDER BY TableId) AS 'Record5'
           ,LEAD(Column2,6,0) OVER(ORDER BY TableId) AS 'Record6'
           ,LEAD(Column2,7,0) OVER(ORDER BY TableId) AS 'Record7'
           ,LEAD(Column2,8,0) OVER(ORDER BY TableId) AS 'Record8'
           ,LEAD(Column2,9,0) OVER(ORDER BY TableId) AS 'Record9'
           ,LEAD(Column2,10,0) OVER(ORDER BY TableId) AS 'Record10'
           ,LEAD(Column2,11,0) OVER(ORDER BY TableId) AS 'Record11'
    FROM Table_1
)

INSERT INTO Table_2
SELECT FileID,Record1,Record2,Record3,Record4,Record5,Record6,Record7
       ,Record8,Record9,Record10,Record11
FROM preselect
WHERE Column1 = 'FILE ID:'

Я упорядочиваю по TableId в функции LEAD, чтобы обеспечить порядок данных. Тогда нужно просто получить значение FileId вместе со значениями следующих 11 строк.

LEAD (Transact- SQL

Common Выражение таблицы (CTE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...