在SQLite中组合两列的聪明方法?
如果这感觉像是代码高尔夫,我很抱歉,但我试图避免从数据库中获取数据,在应用程序代码中处理一些需要在数据集上进行sloow循环的内容,其中有索引可以帮助分组 是否有任何方法可以从这样的数据集获取:在SQLite中组合两列的聪明方法?,sql,sqlite,group-by,group-concat,reformat,Sql,Sqlite,Group By,Group Concat,Reformat,如果这感觉像是代码高尔夫,我很抱歉,但我试图避免从数据库中获取数据,在应用程序代码中处理一些需要在数据集上进行sloow循环的内容,其中有索引可以帮助分组 是否有任何方法可以从这样的数据集获取: sqlite> create table tst (id INTEGER, label TEXT, variable TEXT, value FLOAT); sqlite> insert into tst values (1,"label1","variable 1",1.2); sqli
sqlite> create table tst (id INTEGER, label TEXT, variable TEXT, value FLOAT);
sqlite> insert into tst values (1,"label1","variable 1",1.2);
sqlite> insert into tst values (1,"label2","variable 2",2.2);
sqlite> insert into tst values (1,"label3","variable 3",3.2);
sqlite> select * from tst;
id label variable value
---------- ---------- ---------- ----------
1 label1 variable 1 1.2
1 label2 variable 2 2.2
1 label3 variable 3 3.2
要像这样返回,输出列的名称由变量的内容和标签列内容构成:
sqlite> <magic query here>
id label1_variable1 label2_variable2 label3_variable3
---------- ---------- ---------- ----------
1 1.2 2.2 3.2
也就是说,以宽格式而不是长格式
请提供建议,或者帮助我证明这是不可能的。您可以使用pivot查询来实现这一点:
SELECT id,
SUM(CASE WHEN label = 'label1' THEN value ELSE 0 END) AS 'label1_variable1',
SUM(CASE WHEN label = 'label2' THEN value ELSE 0 END) AS 'label2_variable2',
SUM(CASE WHEN label = 'label3' THEN value ELSE 0 END) AS 'label3_variable3'
FROM tst
GROUP BY id
不能在具有未知列集的SQLite中执行透视查询,因为这样做需要动态SQL。正如user@CL.在下面的评论中提到的,模拟动态SQL的一种方法是首先从tst中选择一个不同的标签,以获得所有列的集合,然后是类似于我上面给出的透视查询。您必须从应用层以编程方式构造pivot查询。是的,对不起,我的问题不清楚。在制定查询时,我需要创建的列的名称是未知的。因此,如果label中还有一个label4,variable4中有一个variable4,那么我也会在输出中得到一个label4\u variable4列;SQLite是一种嵌入式数据库,设计用于与“真正的”编程语言一起使用。@CL。那么我们能断定他不能实现他想要的吗?这要看情况而定。首先使用SELECT DISTINCT标签来构造数据透视查询是否算作在数据上循环?