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 递归地将行值获取到一列(并进行组合)_Sqlite_Pivot - Fatal编程技术网

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
...