使用SQL进行表的“转置”
我不知道这个运算是否有名字,但它类似于线性代数中的转置 是否有一种方法可以将表T1变为1乘n,例如使用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执行该操作: @斯瓦谢克:那么我猜他
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))