简体   繁体   English

如何通过从 SQL Server 中的另一个表中选择列名和值将行插入表中

[英]How to insert row into a table by select column name and value from another table in SQL Server

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 :表乙

ColumnName  | ColumnValue
_________________________
ColumnA     | valueA
ColumnB     | valueB
ColumnC     | valueC
ColumnD     | valueD
ColumnE     | valueE

Thank you!谢谢!

You need to Unpivot the data.您需要对数据进行Unpivot One option uses CROSS APPLY and table valued constructor一种选择使用CROSS APPLYtable valued constructor

SELECT ColumnName,
       ColumnValue
FROM   Yourtable
       CROSS APPLY (VALUES ('ColumnA',ColumnA),
                           ('ColumnB',ColumnB),
                           ('ColumnC',ColumnC),
                           ('ColumnD',ColumnD),
                           ('ColumnE',ColumnE))TC(ColumnName, ColumnValue) 

Try with dynamic UNPIVOT:尝试使用动态 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)

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

Use UNPIVOT :使用UNPIVOT

SELECT U.ColumnName,U.ColumnValue
FROM @tblA A
UNPIVOT
(
  ColumnValue
  for ColumnName in ([ColumnA], [ColumnB], [ColumnC],[ColumnD],[ColumnE])
) U;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQL从一个表列中选择一个最小值,然后将结果插入一个SQL语句的另一个表列中 - Sql Select a minimum value from a table column and insert the results in another table column in one SQL statement 如何将另一行中的值插入列中 - SQL 服务器 - How to insert a value from another row into a column - SQL Server 如何基于Oracle中另一个表中的行的值选择列 - how to select a column based on the value of a row from another table in oracle MySQL从表中选择动态行值作为列名,从另一个表中选择值 - Mysql select dynamic row values as column name from a table and value from another table SQL-从表中选择列,其中另一个表的列值等于列名列表 - SQL - Select Columns from table where another table column value equals column name list 如何在SQL Server 2012中将数据从另一个表的多个表行插入一个表行? - How to insert data into one table row from multiple table rows in another table in SQL Server 2012? 如何使用来自同一表中另一特定行的列值更新sql表中每一行的列 - How to update a column of every row in a sql table with the value of that column from another specific row in the same table 如何将一个表列行分配给 SQL Server 中的另一个表列值 - How to assign one table column row to another table column value in SQL Server 表中的SQL选择行,该行具有与另一个表的列中存在的每个可能值的链接 - SQL Select row from a table which has a link with every possible value that exists in a column in another Table 如何用另一个表的名称插入值 - How to INSERT a value with a name from another table
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM