I have a table with many columns like:
我有一个有很多列的表格,比如:
Table A:
表一:
ColumnA | ColumnB | ColumnC | ColumnD | ColumnE
_______________________________________________
valueA | valueB | valueC | valueD | valueE
How can I insert into Table B like below?
如何像下面这样插入到表B中?
Table B:
表2:
ColumnName | ColumnValue
_________________________
ColumnA | valueA
ColumnB | valueB
ColumnC | valueC
ColumnD | valueD
ColumnE | valueE
Thank you!
谢谢你!
4 个解决方案
#1
1
You can also use a normal UNPIVOT for this.
你也可以用一个普通的UNPIVOT。
A example using table variables:
一个使用表变量的例子:
declare @TableA table (Id int identity(1,1), ColumnA int, ColumnB int, ColumnC int, ColumnD int, ColumnE int);
declare @TableB table (ColumnName varchar(30), ColumnValue int);
insert into @TableA (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE) values
(1,2,3,4,5);
insert into @TableB (ColumnName, ColumnValue)
select ColumnName, ColumnValue from @TableA
unpivot (ColumnValue for ColumnName in (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE)) unpiv;
select * from @TableB;
Returns:
返回:
ColumnName ColumnValue
---------- -----------
ColumnA 1
ColumnB 2
ColumnC 3
ColumnD 4
ColumnE 5
#2
3
You need to Unpivot
the data. One option uses CROSS APPLY
and table valued constructor
您需要取消数据透视。一个选项使用交叉应用和表值构造函数
SELECT ColumnName,
ColumnValue
FROM Yourtable
CROSS APPLY (VALUES ('ColumnA',ColumnA),
('ColumnB',ColumnB),
('ColumnC',ColumnC),
('ColumnD',ColumnD),
('ColumnE',ColumnE))TC(ColumnName, ColumnValue)
#3
1
Try with dynamic UNPIVOT:
试着与动态透视:
DECLARE @COLS VARCHAR(MAX) = ''
SELECT @COLS = @COLS + ', [' + COLUMN_NAME + ']' FROM [yourDBName].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableA'
DECLARE @ColumNames VARCHAR(MAX)= STUFF(@COLS, 1,1, '')
DECLARE @Cmd VARCHAR(MAX) = '
SELECT * FROM
(SELECT * FROM TableA) x
UNPIVOT
(
[Value] FOR [Column] IN (' + @ColumNames + ')
) UNPVT'
INSERT INTO TableB
EXEC (@Cmd)
#4
0
Use UNPIVOT:
用透视:
SELECT U.ColumnName,U.ColumnValue
FROM @tblA A
UNPIVOT
(
ColumnValue
for ColumnName in ([ColumnA], [ColumnB], [ColumnC],[ColumnD],[ColumnE])
) U;
#1
1
You can also use a normal UNPIVOT for this.
你也可以用一个普通的UNPIVOT。
A example using table variables:
一个使用表变量的例子:
declare @TableA table (Id int identity(1,1), ColumnA int, ColumnB int, ColumnC int, ColumnD int, ColumnE int);
declare @TableB table (ColumnName varchar(30), ColumnValue int);
insert into @TableA (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE) values
(1,2,3,4,5);
insert into @TableB (ColumnName, ColumnValue)
select ColumnName, ColumnValue from @TableA
unpivot (ColumnValue for ColumnName in (ColumnA, ColumnB, ColumnC, ColumnD, ColumnE)) unpiv;
select * from @TableB;
Returns:
返回:
ColumnName ColumnValue
---------- -----------
ColumnA 1
ColumnB 2
ColumnC 3
ColumnD 4
ColumnE 5
#2
3
You need to Unpivot
the data. One option uses CROSS APPLY
and table valued constructor
您需要取消数据透视。一个选项使用交叉应用和表值构造函数
SELECT ColumnName,
ColumnValue
FROM Yourtable
CROSS APPLY (VALUES ('ColumnA',ColumnA),
('ColumnB',ColumnB),
('ColumnC',ColumnC),
('ColumnD',ColumnD),
('ColumnE',ColumnE))TC(ColumnName, ColumnValue)
#3
1
Try with dynamic UNPIVOT:
试着与动态透视:
DECLARE @COLS VARCHAR(MAX) = ''
SELECT @COLS = @COLS + ', [' + COLUMN_NAME + ']' FROM [yourDBName].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TableA'
DECLARE @ColumNames VARCHAR(MAX)= STUFF(@COLS, 1,1, '')
DECLARE @Cmd VARCHAR(MAX) = '
SELECT * FROM
(SELECT * FROM TableA) x
UNPIVOT
(
[Value] FOR [Column] IN (' + @ColumNames + ')
) UNPVT'
INSERT INTO TableB
EXEC (@Cmd)
#4
0
Use UNPIVOT:
用透视:
SELECT U.ColumnName,U.ColumnValue
FROM @tblA A
UNPIVOT
(
ColumnValue
for ColumnName in ([ColumnA], [ColumnB], [ColumnC],[ColumnD],[ColumnE])
) U;