标题已更改!问题是将行合并到列。
我使用表(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
答案 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'