SQLite:如何组合子查询结果

SQLite:如何组合子查询结果,sqlite,Sqlite,我有一张这样的桌子 id | inventory_id | serial_type | serial ------------------------------------------------------ 38 | 5892 | 1 | 9502 39 | 5895 | 1 | i95054-1 40 | 5895

我有一张这样的桌子

    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
我有两个子查询来自同一个表,如

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

您正在查找pivot查询:

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
列,我们可以使用它来区分给定
库存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

@Tim Biegeleisen编辑的答案对我来说非常有效。在此基础上,我做了一些修改。不确定是否会有任何改进,只在此处发布以供参考:

选择库存标识,
最大值(串行类型=1时的情况,然后是串行端)为一个串行类型,
最大值(串行类型=2时的情况,然后是串行结束)为两个串行类型
从连续剧
其中,库存id=5895

根据sl分组

您应该向我们展示
序列
列的一般格式,假设您希望能够处理任何
库存id
@TimBiegeleisen:
序列
列是用户定义的,并且是字母数字。如果已知,则表示一般格式。无论如何,我在下面给了你一个查询,至少对你展示给我们的样本数据是有效的。谢谢你的时间!但我认为,这不是我要找的确切代码。由于
serial
列是用户定义的,因此我无法执行
SUBSTR
。如果您想旋转,我们需要了解
serial
列的结构。您肯定有某种要求吗?
串行
取自用户输入文本字段,用户可以输入任意字母数字字符集,比如长度不超过50。上面的数据只是一些测试数据,实际上,它将是任何随机字符。希望我已经回答了你的问题。需要有某种方法将匹配的
序列值对组合在一起。如果没有这一点,我不确定这里是否可以提供一般查询。如果我添加另一列
sl
(请参见问题中的编辑)会怎么样?如果您只想查看一个
库存id
,这是可以接受的。我的答案将覆盖整个表。一次编辑:现在不能选择
库存id
,因为它不出现在
GROUP BY
子句中。所以我选择它作为一个固定文本。谢谢@TimBiegeleisen!我的实际代码有点不同(再次编辑):)我不喜欢你最近的编辑。如果
库存id
未出现在
GROUP BY
子句中,则不能(或至少不应该)选择它。这就是为什么我选择静态文本来解决这个问题。或者,按照我上面的答案去做。