SQLite : How to combine subquery results

标签 sqlite

我有一张这样的 table

    id  |   inventory_id    |   serial_type |   serial
------------------------------------------------------
    38  |       5892        |       1       |   9502
    39  |       5895        |       1       |   i95054-1
    40  |       5895        |       2       |   m95054-1
    41  |       5895        |       1       |   i95054-2
    42  |       5895        |       2       |   m95054-2
    43  |       5895        |       1       |   i95054-3
    44  |       5895        |       2       |   m95054-3
    45  |       5895        |       1       |   i95054-4
    46  |       5895        |       2       |   m95054-4

我有 2 个来自同一个表的子查询,例如

SELECT inventory_id, serial as type_one_serial
FROM serials
WHERE serial_type = 1
AND inventory_id = 5895

还有一个

SELECT inventory_id, serial as type_two_serial
FROM serials
WHERE serial_type = 2
AND inventory_id = 5895

我怎样才能把这些结合起来得到这样的结果

inventory_id | type_one_serial | type_two_serial
------------------------------------------------
5895         |  i95054-1       |    m95054-1
5895         |  i95054-2       |    m95054-2
5895         |  i95054-3       |    m95054-3
5895         |  i95054-4       |    m95054-4

编辑: 我修改了源表以包含另一列 sl

    sl  |   id  |   inventory_id    |   serial_type |   serial
 ----------------------------------------------------------------
    0   |   38  |       5892        |       1       |   9502
    0   |   39  |       5895        |       1       |   i95054-1
    0   |   40  |       5895        |       2       |   m95054-1
    1   |   41  |       5895        |       1       |   i95054-2
    1   |   42  |       5895        |       2       |   m95054-2
    2   |   43  |       5895        |       1       |   i95054-3
    2   |   44  |       5895        |       2       |   m95054-3
    3   |   45  |       5895        |       1       |   i95054-4
    3   |   46  |       5895        |       2       |   m95054-4

最佳答案

您正在寻找数据透视查询:

SELECT inventory_id,
       MAX(CASE WHEN serial_type = 1 THEN 'i' || SUBSTR(serial, 2) END) AS type_one_serial,
       MAX(CASE WHEN serial_type = 2 THEN 'm' || SUBSTR(serial, 2) END) AS type_two_serial
FROM serials
WHERE serial_type IN (1, 2) AND      -- the WHERE clause may be optional
      inventory_id = 5895            -- depending on what you want
GROUP BY inventory_id,
         SUBSTR(serial, 2)

更新:

考虑到新的 sl 列,我们可以使用它来区分给定 inventory_id 的两种类型的连续出版物。在这种情况下,我们可以编写以下查询:

SELECT inventory_id,
       MAX(CASE WHEN serial_type = 1 THEN serial END) AS type_one_serial,
       MAX(CASE WHEN serial_type = 2 THEN serial END) AS type_two_serial
FROM serials
GROUP BY inventory_id,
         sl

关于SQLite : How to combine subquery results,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42128374/

相关文章:

sqlite - 如何格式化 SQLite 的日期和时间值?

android - 将大型 ArrayList 存储到 SQLite

python - 为什么我的 python 看不到 pysqlite?

android - 在 sqlite 中搜索,基于 String 获取描述

.net - sqlite:SQLiteTransaction 和 SQLiteTransaction2 有什么区别

c++ - 如何使用qt将数据插入sqlite

iphone - SQLite3 COUNT 不正确

java - 将数据库中的用户名值显示到 TextView

sqlite - 如何从sqlite3数据库中的字符串中删除字符?

javascript - Jeep-sqlite 加载程序未在网络中运行