【问题标题】:Taking the "transpose" of a table using SQL使用 SQL 对表进行“转置”
【发布时间】:2012-11-06 20:37:23
【问题描述】:

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

有没有办法将 1 x n 表 T1 转为

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 都不太可能被识别。

【问题讨论】:

标签: sql sybase linear-algebra transpose unpivot


【解决方案1】:

基本上,你需要UNPIVOT这个数据,你可以使用UNION ALL来执行这个:

select 'c_1' col, c_1 value
from yourtable
union all
select 'c_2' col, c_2 value
from yourtable
union all
select 'c_3' col, c_3 value
from yourtable

【讨论】:

  • 您可以使用select c.name from syscolumns c join sysobject o on c.id = o.id where o.name = 'yourtable' 从sybase 获取列列表,然后使用一些动态sql 从@bluefeet 生成出色的解决方案。
【解决方案2】:

@swasheck 那么我猜他们必须将列名读入列表

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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    相关资源
    最近更新 更多