我正在尝试从在双列中存储键值对的 SQLite 表中提取数据。例如,用键foo
, bar
, man
, and row
,该表将如下所示:
| _id | external_id | key | value |
|-----|-------------|------|-------|
| 1 | 12345 | foo | cow |
| 2 | 12345 | bar | moo |
| 3 | 12345 | man | hole |
| 4 | 12345 | row | boat |
| 5 | 67980 | foo | abc |
| 6 | 67890 | bar | def |
| 7 | 67890 | man | ghi |
| 8 | 67890 | row | jkl |
我想执行一个查询,给出每个external_id
在一行中,键作为列,值作为行。像这样:
| external_id | foo | bar | man | row |
|-------------|-----|------|------|------|
| 12345 | cow | moo | hole | boat |
| 67890 | abc | def | ghi | jkl |
我能想到的唯一解决方案是每个键的连接:
SELECT a.external_id, b.foo, c.bar, d.main, e.row
FROM myTable AS a
LEFT JOIN
(SELECT external_id, key AS foo
FROM myTable
WHERE key="foo") AS b
ON a.external_id = b.external_id
...
LEFT JOIN
(SELECT external_id, key AS row
FROM myTable
WHERE key="row") AS e
ON a.external_id = e.external_id
GROUP BY a.external_id
有一个更好的方法吗?
另一个可用的选项是使用条件聚合:
SELECT external_id,
MAX(CASE WHEN key = 'foo' THEN value END) AS foo,
MAX(CASE WHEN key = 'bar' THEN value END) AS bar,
MAX(CASE WHEN key = 'man' THEN value END) AS man,
... etc
FROM mytable
GROUP BY external_id
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)