Sqlite 递归地将行值获取到一列(并进行组合)
我有一个输入表,它有日期和固定数量的事件。我需要从中创建带有发生日期的事件列表,以及组合事件及其发生的列表 例如: 初始表格:Sqlite 递归地将行值获取到一列(并进行组合),sqlite,pivot,Sqlite,Pivot,我有一个输入表,它有日期和固定数量的事件。我需要从中创建带有发生日期的事件列表,以及组合事件及其发生的列表 例如: 初始表格: CREATE TABLE events ( date DATE PRIMARY KEY, e1 INTEGER, e2 INTEGER, e3 INTEGER ); date | e1 | e2 | e3 | -------------------------- 2017-02-04 | 2 | 1 |
CREATE TABLE events (
date DATE PRIMARY KEY,
e1 INTEGER,
e2 INTEGER,
e3 INTEGER
);
date | e1 | e2 | e3 |
--------------------------
2017-02-04 | 2 | 1 | 26 |
2017-02-05 | 14 | 2 | 1 |
2017-02-06 | 1 | 3 | 2 |
输出1
eventN | total | date1 | date2 |...| date'N'
--------------------------------------------------------
01 | 3 | 2017-02-04 | 2017-02-05 |...| 2017-02-06
02 | 2 | 2017-02-05 | 2017-02-06 |...| (null)
...
26 | 1 | 2017-02-04 | (null) |...| (null)
输出2
CobineEventN | total | date1 | ... | date'N'
-----------------------------------------------------
0102 | 2 | 2017-02-05 | ... | 2017-02-06
0103 | 1 | 2017-02-06 | ... | (null)
....
2526 | 1 | 2017-02-04 | ... | (null)
....
限制:
- 这必须在SQLite中完成
- 日期没有限制(即“n”个唯一日期)
- 事件是(大约)50个ID的固定列表
- 输出为表格,每种类型的组合对应一个表格李>
- 作者掌握了SQL技巧
REATE TABLE event (id integer NOT NULL PRIMARY KEY AUTOINCREMENT, date date NOT NULL, event smallint unsigned NOT NULL);
*“id”是不必要的
比如:
Id date event
31 2016-10-05 1
44 2016-10-07 1
32 2016-10-05 2
我可以使用如下查询:
select A.event as nA, B.event as nB, C.event as nC, date
from event as A, event as B, event as C
where A.date = B.date
and B.date=C.date
and nC<>nA
and nC<>nB
虽然格式与我想象的不完全一样,但效果很好。
我不需要为项目的其余部分创建更多的列,只需要执行正确的查询
BR单独在SQLite中执行此操作是不可能的。@CL.甚至不输出1?即使输出1也需要自定义列数,并且SQLite本身没有构造动态查询的机制。因此@CL.,如果我理解正确,我有两个选择,或者我使用“Python”从外部绘制表,或者我“透视”它,不得不与大量列和行稀疏填充的表共存?第二个选项比第一个选项有什么优势吗?你需要桌子做什么?您不是从“真正的”编程语言访问SQLite吗?
nA nB nC date
1 2 3 2016-10-05
1 2 3 2016-10-07
1 2 4 2016-10-07
...