将行转换为列...你是怎么做到的?

时间:2014-10-14 14:49:08

标签: sqlite unpivot

假设您有一个名为scoreTotals的三列表。它有三个球员的每周积分总数。

如果您在scoreTotals上运行此查询:

select *
from scoreTotals;

你会得到这个:

Jones Smith Mills
50    70    60

如何将输出重新配置给最终用户,这样就是这样:

player points
Jones  50
Smith  70
Mills  60

诀窍是让列标题显示在左侧作为实际数据字段,而不是列的标题。

我在StackOverflow上看到了有关如何将列转换为行的一些内容,但没有一个解决了这个问题,我尝试根据我的情况调整其他想法并不起作用。

它需要在sqlite中工作,这意味着pivot和unpivot关键字不起作用。我希望这样做,而不是将表存储到数据库,然后删除它。

以下代码将生成我正在尝试操作的表:

create table scoreTotals(Jones int, Smith int, Mills int);
insert into scoreTotals values (50, 70, 60);

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我的解决方案取决于您可能使用哪种编程语言来处理sqlite命令。在我的情况下,我使用python连接到sqlite。在我选择返回记录之后,我将结果集存储到“列表列表”(又名表)中,然后我可以使用python中的以下单行代码转置(也称为unpivot):

result = [[row[idx] for row in table] for idx in xrange(len(table[0]))]   # transpose logic using list comprehension

SQLite没有unpivot命令,但是bluefeet为MySQL提供的这个解决方案也适用于SQLite:

MySQL - turn table into different table