SQL将列名作为值插入表中

时间:2013-12-04 06:09:27

标签: sql sql-server

我有2个表,1个有列

Year | Jan | Feb | Mar | Apr | May

等。

这需要转移到带有列

的表中
Year | MonthNo | Value 

我知道转换的工作方式是从月份缩写到数字,但我无法实现每种 - >>列 - >插入。请协助。

5 个答案:

答案 0 :(得分:1)

请尝试使用unpivot:

SELECT Year, MonthNo, Value
FROM 
   (SELECT *
   FROM Table1) p
UNPIVOT
   (Value FOR MonthNo IN 
      (Jan, Feb, Mar)
)AS unpvt;

SQL Fiddle Demo

答案 1 :(得分:1)

如果您使用的是SQL Server 2005或更高版本,请使用UNPIVOT operator

INSERT INTO Table2 (Year, MonthNo, Value)
SELECT Year, MonthNo, Value
FROM Table1   
UNPIVOT (Value FOR MonthNo IN (Jan, Feb, Mar)) AS unpvt;

答案 2 :(得分:0)

您可以执行以下操作:

INSERT INTO table2 
SELECT Year,'1', Jan FROM table1 

这是一月份你必须重复几个月。只需改变月号即可。和名字。

答案 3 :(得分:0)

在SQL Server上,您可以使用unpivot,但为了便于携带,我总是使用如下构造:

select Year
,      1 monthno
,      jan_value
from   table
union all
select Year
,      2 monthno
,      feb_value
from   table
...
union all
select Year
,      12 monthno
,      dec_value
from   table

答案 4 :(得分:-2)

如果您在SQL Server中执行此操作,则可以执行select语句:

SELECT column_name,
       * 
FROM information_schema.columns 
WHERE table_name = 'YourTableName'

使用它,您可以插入语句