根据多列

时间:2015-06-24 06:47:17

标签: mysql

如果我有两年的名字和年收入的数据库作为列举的列(我知道这是糟糕的数据库设计,但我现在没有自由改变它)。例如:

Name_2000,Name_2010,Income_2000,Income_2010

如何构造查询以返回第一个结果列中两个名称列中的所有唯一名称。第二个结果列应该是该名称2000年所有收入的总和。第三个结果列应该是该名称2010年所有收入的总和。

显然,在这个例子中,一个人(记录)可能会在年份之间更改姓名,或者在任何一年都没有姓名。

我可以在一个查询中执行此操作吗?通过某个名称子集进行过滤的能力也很方便。

1 个答案:

答案 0 :(得分:0)

我建议使用一个子查询,将两个结果联合起来,每个名称和收入一组,但每个都为另一年的收入返回一个虚拟0。

这样的事情: -

SELECT aname, SUM(aincome2000), SUM(aincome2010)
FROM
(
    SELECT Name_2000 AS aname, Income_2000 AS aincome2000, 0 AS aincome2010
    FROM sometable
    UNION ALL
    SELECT Name_2010 AS aname, 0 AS aincome2000, Income_2010 AS aincome2010
    FROM sometable
) sub1
GROUP BY aname