【问题标题】:Sqlite Select Into MatrixSqlite 选择成矩阵
【发布时间】:2014-08-12 17:28:40
【问题描述】:

我不确定如何为这个问题命名,但我正在尝试执行以下操作:

我在表格中有如下形式的数据:

id         value      date
--         -----       --------
123        100        2014-08-01
124        101        2014-08-01
234        100.5      2014-08-02
...

它在两周内大约有 100k 行。我一直在尝试做的是创建一个排序矩阵,其中第一列是此期间存在的唯一 ID 列表,然后为每个日期创建一列,填充 value 字段,如果没有给定date 上特定id 的值,然后用NULL 填充它。

id      2014-08-01    2014-08-02   ...
-----   ----------    ---------    -----
123     100           105
124     101           NULL
...

我正在使用 SQLite,我的第一种方法是创建一个临时表,然后我想我可以填充它。创建表并使用一组唯一的id 填充第一列后,我尝试了以下代码(注意:我在temp_table 中使用它们的日期字符串命名了这些列):

INSERT OR REPLACE INTO temp_table ("2014-08-01") SELECT my_table.value
FROM my_table LEFT OUTER JOIN temp_table ON temp_table.id = my_table.id
WHERE my_table.date = '2014-08-01'

不幸的是,这似乎只是将新行添加到我的表中,而不是替换到现有的空行中,除了 id。我还考虑过如何使用复杂的SELECT 来做到这一点,但除了将表格加入到自身之外,我不确定它是如何工作的。

有什么建议吗?

【问题讨论】:

    标签: sql sqlite join insert


    【解决方案1】:

    要就地更新行,请使用 UPDATE:

    UPDATE temp_table
    SET "2014-08-01" = (SELECT value
                        FROM my_table
                        WHERE id = temp_table.id
                          AND date = '2014-08-01')
    

    您可以使用多个 UPDATE 语句,或将所有列写入同一个查询。 但是,不可能动态循环遍历可能的列。

    【讨论】:

      猜你喜欢
      • 2011-01-02
      • 2020-08-31
      • 2012-01-01
      • 2023-03-07
      • 2019-04-01
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      相关资源
      最近更新 更多