SQL:将列的值匹配为行?

时间:2012-09-15 15:21:46

标签: mysql sql

我是SQL的菜鸟,我想在这里做点什么。我一直在四处寻找并没有找到办法,也许是因为我不知道如何解释它,因此我可能没有正确搜索。

这是问题所在: 我有一个包含3列的表,作为不同表的辅助属性集(但这与问题无关)。

我有什么:

--------------------------------------------
 listing_id  |  field_id  |  listing_value
--------------------------------------------
    1             Fruit        Apple
    1             Color        Red
    2             Fruit        Banana
    2             Color        Yellow
    3             Fruit        Grape
    3             Color        Purple

我想要的是什么:

----------------------------------------------------
 listing_id  |  listing_value_1  |  listing_value_2 
----------------------------------------------------
    1             Apple               Red
    2             Banana              Yellow
    3             Grape               Purple

请记住,这一切都发生在同一张桌子上。 这是选择值的全部内容,因此查询必须以SELECT

开头

我尝试了JOIN, GROUP and UNION命令,但我没有取得任何成功的结果。

另外,我试图通过缺少一些命令的phpMyAdmin来实现这一点(例如我不能使用INTERSECT,我可以使用Select * FROM x但似乎无法使用SELECT x.*

提前感谢:)

2 个答案:

答案 0 :(得分:1)

您可以使用聚合函数和CASE

执行此操作
select listing_id, 
  max(case when field_id = 'Fruit' then listing_value end) listing_value_1,
  max(case when field_id = 'Color' then listing_value end) listing_value_2
from yourtable
group by listing_id

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

试试这个

SELECT t1.listing_id , t1.listing_value as listing_value1 , t2.listing_value as listing_value2
  FROM table t1, table t2 where t1.listing_id = t2.listing_id AND t1.field_id = "Fruit" AND t2.field_id = "Color"