该表格如
----------------------------
|Date |label |data |
----------------------------
|"2018-01-01" |"A" |1.01 |
----------------------------
|"2018-01-02" |"A" |1.02 |
----------------------------
|"2018-01-01" |"B" |2.01 |
----------------------------
|"2018-01-02" |"B" |2.02 |
----------------------------
|"2018-01-01" |"C" |3.01 |
----------------------------
|"2018-01-02" |"C" |3.02 |
----------------------------
|"2018-01-01" |"D" |4.01 |
----------------------------
|"2018-01-02" |"D" |4.02 |
----------------------------
我想选择具有以下格式的数据:
---------------------------------------
|Date |"A" |"B" |"C" |"D" |
---------------------------------------
|"2018-01-01" |1.01 |2.01 |3.01 |4.01 |
---------------------------------------
|"2018-01-02" |1.02 |2.02 |3.02 |4.02 |
---------------------------------------
在我的数据库中,有数千个标签,所以我正在寻找一种方法来按标签自动组织时间序列数据,然后使用标签作为列名。
答案 0 :(得分:1)
SQLite不支持pivot
(我不是特别喜欢),所以使用条件聚合:
select date,
max(case when label = 'a' then data end) as a,
max(case when label = 'b' then data end) as b,
max(case when label = 'c' then data end) as c,
max(case when label = 'd' then data end) as d
from t
group by date;
不幸的是,SQL查询有一组固定的列。因此,如果您有可变数量的标记,则需要使用动态SQL来生成语句。也就是说,您需要将查询构造为字符串,然后执行它。
此外,数据库对表和结果集中的列数有最大限制。在SQLite中,我认为默认限制是2,000列。这限制了您可以拥有的值的数量。