表行为列?

时间:2014-03-12 15:22:09

标签: android sqlite pivot

我有以下两个表,第二个表包含第一个表的每个条目的动态数量的属性:

people:

_id  |  name  |  first | status
----------------------------------
  1  |  Smtih |  Sam   |   on
  2  |   Doe  |  Joe   |   off


constraints: some people may have no more than in people, some may have 20:

_id  | persid |  type  | value
-------------------------------------------------
  1  |    2   |   IQ   |  90
  2  |    2   |  bold  |  yes
 ... |   ...  |   ...  |  ...

作为中间结果,我想得到这个:

_id  |  name  |  first | status |  IQ  | bold | ...
------------------------------------------------  ... more depending on person
  2  |   Doe  |  Joe   |   off  |  90  |  yes | ...

这样我最终可以选择具有特定属性的项目,例如:

`SELECT * FROM< - 上表 - > WHERE status ='off'和IQ> '75'

如果那些没有正确属性(在这种情况下是IQ)的人甚至不会出现在中间表中(更快?),我会没事的。

可悲的是,我在自己的微弱尝试中并没有走得太远。我想GROUP_CONCAT应该发挥作用,但无法让它发挥作用。

一如既往,感谢你们提前花时间和精力!

1 个答案:

答案 0 :(得分:0)

正如塞尔文所写,如果你知道所有类型,你就可以生成一个查询。但是如果按时间添加属性,则需要两个查询。以下代码中包含IQ的最后一部分将无效,因为IQ不是列。

SELECT * FROM <--the above table--> WHERE status = 'off' AND IQ > '75' 

首先,您需要获取固定信息。

SELECT _id, name, first, status ...

你可以选择(例如通过IQ):

SELECT _id, name, first, status FROM wherever WHERE (SELECT value FROM attributes WHERE persid = _id AND type='IQ') > 75

最后,对于每个选定的记录,您需要获取属性。

SELECT value FROM attributes WHERE presid=_id_given_by_program