MySQL认为我需要使用ROLLUP,但我不确定

时间:2011-04-27 10:17:13

标签: mysql sql oracle

如果我有一组人员标识符(12,34,54,65)和一个包含密钥(性别,年龄,薪水等)的数据库,例如:

详细信息表

{Person ID,   Key,    Value}
{12,           Gender,  Male}
{34,           Age,     40}
{54,           Salary,  30000}

人员表

ID
12
34
54
65

我想创建由{12,34,54,65} x {Age,Salary,Gender}的powerset组成的行,无论Details表中是否有数据值

2 个答案:

答案 0 :(得分:3)

您不需要汇总,您需要透视表 -

SELECT p.id, d.gender, d.age, d.salary FROM personnel p
  JOIN (
    SELECT person_id,
      MAX(IF(`key` = 'gender', `value`, NULL)) AS gender,
      MAX(IF(`key` = 'age', `value`, NULL)) AS age,
      MAX(IF(`key` = 'Salary', `value`, NULL)) AS salary
    FROM
      details
    GROUP BY
      person_id) d
    ON p.id = d.person_id;

答案 1 :(得分:0)

我猜你正在寻找的东西很简单:

select * from personnel p, details d where d.person_id = p.person_id

details表对我来说闻起来像是一个根本破碎的设计。 value列的类型是什么?一串?它存储字符串,整数和货币值?祝你好运。我希望你不要真正使用任何这些数据,更不用说搜索它了。

编辑:没有...我现在认为Devart是现货。我不明白这个问题。叹息。