我当前在垂直放置的表中有一个数据:
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
谢谢
我参加聚会有点晚了,但我会试一试。仅当您的数据与文件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行的值即可。