以递归方式将行值提取到一列(并进行组合)

时间:2017-02-28 00:30:04

标签: sqlite pivot

我有一个输入表,它有日期和固定数量的事件。我需要从中创建出现日期的事件列表,以及组合事件及其出现的列表。

示例:

初始表:

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 ids
  • 的固定列表
  • 输出将是表格,每种类型的组合一个。
  • 作者的SQL技巧。

1 个答案:

答案 0 :(得分:0)

经过与老师的一些谈话,他指出我的模型从一开始就错了。 将表格更改为:

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

并获得所需的值。

    nA  nB  nC   date
    1   2   3   2016-10-05
    1   2   3   2016-10-07
    1   2   4   2016-10-07
...

虽然格式并不完全符合我的想象,但效果还算不错。 而且我不需要为项目的其余部分创建更多列,只需要做正确的查询。

BR