Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLite中组合两列的聪明方法?_Sql_Sqlite_Group By_Group Concat_Reformat - Fatal编程技术网

在SQLite中组合两列的聪明方法?

在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

如果这感觉像是代码高尔夫,我很抱歉,但我试图避免从数据库中获取数据,在应用程序代码中处理一些需要在数据集上进行sloow循环的内容,其中有索引可以帮助分组

是否有任何方法可以从这样的数据集获取:

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标签来构造数据透视查询是否算作在数据上循环?