在一行中显示不同类类型的类值

时间:2011-10-30 10:02:38

标签: sql sqlite

我不知道如何在sqlite中编写来自此表的查询:

image_id | feature_id | feature_val
_________|____________|____________
  12     |    1       |     41
  12     |    2       |     82
  12     |    3       |     75

  74     |    1       |     23
  74     |    2       |     35
  74     |    3       |     72

返回结果表:

image_id |  feature_1_val  | feature_2_val | feautre_3_val
_________|_________________|_______________|_______________
  12     |       41        |      82       |       75
  74     |       23        |      35       |       72      

我们可以假设图像特征的数量是恒定的并且等于3。 我非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

将行转换为列的过程称为pivoting。最好是在客户端完成。例如,Microsoft Excel通过数据透视表提供了广泛的支持。

但是在SQL中并非不可能。以下是使用max(case(技巧的一个示例:

select  image_id
,       max(case when feature_id = 1 then feature_val end) as feature_1_val
,       max(case when feature_id = 2 then feature_val end) as feature_2_val
from    YourTable
group by
        image_id

答案 1 :(得分:0)

考虑到问题中列出的限制,您可以使用子查询创建一种不优雅但可行的方法:

SELECT it.image_id,
       (SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 1) AS feature_1_val,
       (SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 2) AS feature_2_val,
       (SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 3) AS feature_3_val 
  FROM ImageTable AS it
  GROUP BY it.image_id
相关问题