sql - 在 SQLite 中组合两列的巧妙方法?

标签 sql sqlite group-by group-concat reformat

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

有没有办法从这样的数据集中获取:

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       

也就是说,采用宽格式而不是长格式?

请提出建议,或者通过证明这是不可能的来帮助我。

最佳答案

您可以使用数据透视查询来实现此目的:

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。作为用户@CL。他在下面的评论中提到,模拟动态 SQL 的一种方法是首先执行 SELECT DISTINCT label FROM tst 来获取所有列的集合,然后进行类似于我上面给出的数据透视查询。您必须从应用程序层以编程方式构建数据透视查询。

关于sql - 在 SQLite 中组合两列的巧妙方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784538/

相关文章:

MySQL 正则表达式位于字符串中间

sqlite - Py2app 不包含 Sqlite 驱动程序 - "Database error: Driver not loaded Driver not loaded"

android - 用于处理日期的 Sqlite 查询

iphone - SQLite 查询中的子查询不起作用

c# - 在 LINQ 中按时间跨度分组

mysql - 在按周分组的 2 个日期之间在 MYSQL 中生成报告

python - Pandas:使用函数将字符串转换为 float

sql - Transact-SQL 总结耗时

mysql - 查找两个选择查询的交集

mysql - Group BY 日期统计有多少个