如何从另一个数据垂直放置的表中水平插入数据?

问题描述 投票:0回答:1

我当前在垂直放置的表中有一个数据:

 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

谢谢

pivot-table sql-server-2014 sql-insert
1个回答
0
投票

我参加聚会有点晚了,但我会试一试。仅当您的数据与文件ID(后跟11条记录)一致时,此方法才有效。首先,您需要有一个带有标识列的表。创建表时,我会习惯这样做。将批量插入下表中。这将存储具有行ID的数据,稍后将很重要。

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:'

我正在通过LEAD函数中的TableId进行排序,以确保数据的顺序。然后,只需获取FileId值以及接下来的11行的值即可。

LEAD (Transact-SQL

Common Table Expression (CTE)

© www.soinside.com 2019 - 2024. All rights reserved.