使用SQL进行表的“转置”

使用SQL进行表的“转置”,sql,sybase,linear-algebra,transpose,unpivot,Sql,Sybase,Linear Algebra,Transpose,Unpivot,我不知道这个运算是否有名字,但它类似于线性代数中的转置 是否有一种方法可以将表T1变为1乘n,例如 c_1|c_2|c_3|...|a_n ------------------- 1 |2 |3 |...|n 进入一个n乘2的表格,如下所示 key|val ------- c_1|1 b_2|2 c_3|3 . |. . |. a_n|n 我假设T1中的每一列c_I都不太可能被识别。基本上,您需要取消该数据的IVOT,您可以使用UNION ALL执行该操作: @斯瓦谢克:那么我猜他

我不知道这个运算是否有名字,但它类似于线性代数中的转置

是否有一种方法可以将表T1变为1乘n,例如

c_1|c_2|c_3|...|a_n
-------------------
1  |2  |3  |...|n
进入一个n乘2的表格,如下所示

key|val
-------
c_1|1
b_2|2
c_3|3
.  |.
.  |.
a_n|n
我假设T1中的每一列c_I都不太可能被识别。

基本上,您需要取消该数据的IVOT,您可以使用UNION ALL执行该操作:


@斯瓦谢克:那么我猜他们必须把列名读到一个列表中

mylistobject = SELECT sql FROM sqlite_master WHERE tbl_name = 'table_name' AND type = 'table'
创建一个新表,列名称是主键,然后是值,然后在列表上迭代,这比Python中的要简单得多

for columnName in list:

   row = cursor.execute('SELECT ' + str(value) + 'FROM tableToBeTransposed WHERE COLUMN = ' + str(c_i) + ';').fetchone()

   cursor.execute('INSERT INTO newTable(c_i, values), (?,?)' (columnName, value))

我认为这个命令是PIVOT,在这里有详细说明:@bobbyzhivago我认为他需要的是UNPIVOT,它在sybase中不存在。你可以从sybase获得一个列列表,其中select c.name from syscolumns c join sysobject o on c.id=o.id,其中o.name='yourtable',然后使用一些动态sql从@bluefeet生成优秀的解决方案。
for columnName in list:

   row = cursor.execute('SELECT ' + str(value) + 'FROM tableToBeTransposed WHERE COLUMN = ' + str(c_i) + ';').fetchone()

   cursor.execute('INSERT INTO newTable(c_i, values), (?,?)' (columnName, value))