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
子句中,则不能(或至少不应该)选择它。这就是为什么我选择静态文本来解决这个问题。或者,按照我上面的答案去做。