Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:将多列转换为单列_Sql_Sql Server_Database - Fatal编程技术网

SQL Server:将多列转换为单列

SQL Server:将多列转换为单列,sql,sql-server,database,Sql,Sql Server,Database,我有这个 name1 name2 name3 value1 value2 value3 A B C 1 2 3 我真的需要这个 Name Value A 1 B 2 C 3 请帮帮我。你可以使用union select name1 as Name, value1 as Value from mytable union select name2, v

我有这个

name1   name2   name3   value1  value2  value3
  A       B       C        1       2       3
我真的需要这个

Name    Value
  A       1
  B       2 
  C       3
请帮帮我。

你可以使用union

 select name1 as Name, value1 as Value from mytable
 union 
 select name2, value2 from mytable
 union 
 select name3, value3 from mytable
你可以用union

 select name1 as Name, value1 as Value from mytable
 union 
 select name2, value2 from mytable
 union 
 select name3, value3 from mytable
使用下面的查询

  Select name1 Name,value1 Value from YourTable 
   Union all
    Select name2 ,value2 from YourTable 
     Union all
      Select name3 ,value3 from YourTable 
使用下面的查询

  Select name1 Name,value1 Value from YourTable 
   Union all
    Select name2 ,value2 from YourTable 
     Union all
      Select name3 ,value3 from YourTable 

临时表方法,以防union all执行缓慢或只是为了显示替代

DECLARE @Table as TABLE (name1 CHAR(1), name2 CHAR(1), name3 CHAR(1), value1 INT, value2 INT, value3 INT)
INSERT INTO @Table VALUES ('A','B','C',1,2,3)

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
    BEGIN
        DROP TABLE #TempTable
    END

SELECT name1 as Name, value1 as Value
INTO #TempTable
FROM
    @Table

INSERT INTO #TempTable
SELECT name2, value2
FROM
    @Table

INSERT INTO #TempTable
SELECT name3, value3
FROM
    @Table

SELECT * 
FROm
    #TempTable

临时表方法,以防union all执行缓慢或只是为了显示替代

DECLARE @Table as TABLE (name1 CHAR(1), name2 CHAR(1), name3 CHAR(1), value1 INT, value2 INT, value3 INT)
INSERT INTO @Table VALUES ('A','B','C',1,2,3)

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL
    BEGIN
        DROP TABLE #TempTable
    END

SELECT name1 as Name, value1 as Value
INTO #TempTable
FROM
    @Table

INSERT INTO #TempTable
SELECT name2, value2
FROM
    @Table

INSERT INTO #TempTable
SELECT name3, value3
FROM
    @Table

SELECT * 
FROm
    #TempTable

是你的friend@AlexB.If在这个例子中,unpivot是他的朋友,我敦促你展示一个例子,因为事实是数据是双数据透视的,一次取消Pivot会让你的名字排成行,但仍然有3个值列。第二次取消Pivot会让你看到名称到值的每一种组合(9)。在这种情况下,UNION all或inserting到temp表或表变量将是最直接的方法,尽管我仍然可以想出一种方法,使用两个级别的unpivot,然后使用条件agregation。。指导我类似的案例,但它们与我的案例不同。是你的friend@AlexB.If在这个例子中,unpivot是他的朋友,我敦促你展示一个例子,因为事实是数据是双数据透视的,一次取消Pivot会让你的名字排成行,但仍然有3个值列。第二次取消Pivot会让你看到名称到值的每一种组合(9)。在这种情况下,UNION all或inserting到temp表或表变量将是最直接的方法,尽管我仍然可以想出一种方法,使用两个级别的unpivot,然后使用条件agregation。。指导我类似的案例,但它们与我的案例不同。谢谢!斯盖里奇。。你救了我一天…谢谢!斯盖里奇。。你救了我一天…谢谢Unnikrishman R..谢谢Unnikrishman R。。