在SQLite中从两行在结果表中创建一行

时间:2015-02-26 12:53:20

标签: sql sqlite

标题已更改!问题是将行合并到列。

我使用表(ImageAttribute)在数据库中标记图像(表格图像),该表基本上有两行 - 一行用于属性类型,另一行用于值。

数据库是:

Image.id
Image.URI
ImageAttribute.imageId
ImageAttribute.attributeType
ImageAttribute.attributeValue     

ImageAttribute.imageId指的是Image.id

一个图像可能有许多属性。 e.g:

imageId | attributeType | attributeValue
--------+---------------+---------------
1       |COLOR          | blue
1       |QUALITY        | good
1       |MEMO           | some notes for image 1
2       |COLOR          | red
2       |QUALITY        | good
2       |OBJECTS        | cars, trees

从图像到图像,属性集可能不同。

是否可以选择具有任何值属性COLOR并且QUALITY ='good'的所有图像,并将这些信息显示在一行中,例如:

id      | COLOR         | QUALITY        
--------+---------------+---------------
1       |blue           | good
2       |red            | good

3 个答案:

答案 0 :(得分:2)

一种选择是使用条件聚合来基本上pivot您的结果:

select imageid, 
       max(case when attributetype = 'color' then attributevalue end) Color,
       max(case when attributetype = 'quality' then attributevalue end) Quality
from imageattribute
group by imageid

如果您只需要使用quality = good过滤结果,则可以添加having语句:

having max(case when attributetype = 'quality' then attributevalue end) = 'good'

答案 1 :(得分:2)

此语句似乎也有效(并且您可以使用sgedded提供的SQL小提琴链接,这对测试查询非常有用)。

SELECT im1.imageId as id, im1.attributeValue as COLOR, im2.attributeValue as QUALITY
FROM imageattribute im1, imageattribute im2
WHERE im1.imageId = im2.imageId
AND im1.attributeType = "COLOR"
AND im2.attributeType = "QUALITY"
AND im2.attributeValue = "good"

亚历。

答案 2 :(得分:1)

太可怕了,但也有效:)

SELECT A1.imageId, A1.attributeValue, A2.attributeValue
FROM ImageAttribute as A1
INNER JOIN ImageAttribute AS A2 ON A2.imageId=A1.imageId
WHERE A1.attributeType='QUALITY' AND A1.attributeValue='good' AND A2.attributeType='COLOR'