0

我想将包含两个变量的单列旋转/重组为具有相同索引的两列,并计算这些变量之间的差异。

下表定义显示了两种不同的数据类型由类别、国家 ID 和年份标识。

CREATE  TABLE IF NOT EXISTS Data (
  dataID INT PRIMARY KEY AUTO_INCREMENT ,
  category INT NOT NULL REFERENCES Categories (Category),
  dataType INT NOT NULL,
  countryID INT NOT NULL REFERENCES Countries (countryID),
  year INT NOT NULL,
  values DEC(20,2) NULL);

目标是达到下表:

CREATE  TABLE IF NOT EXISTS Data (
  dataID INT PRIMARY KEY AUTO_INCREMENT ,
  category INT NOT NULL REFERENCES Categories (Category),
  countryID INT NOT NULL REFERENCES Countries (countryID),
  year INT NOT NULL,
  dataType1values DEC(20,2) NULL),
  dataType2values DEC(20,2) NULL),
  type1-type2values DEC(20,2) NULL);

有大约 100 多个国家、25 年和 5000 多个类别。尽管进行了大量研究,但我仍在努力寻找一种有效的方法来实现(显然)所需的自联接。请让我知道,如果你有任何问题。谢谢!

4

1 回答 1

1

这假设每个类别/县/年都有类型 1 和类型 2 值。如果您需要处理两者都没有的行,它会变得更加复杂(特别是因为 MySQL 没有CROSS JOIN)。

create table NewData (<column definitions>)
select d1.category, d1.countryID, d1.year,
       d1.values as dataType1values, d2.values as dataType2values,
       d1.values-d2.values as values_diff,
       NULL dataID /* to allow auto-increment */
from Data d1
join Data d2 USING (category, countryID, year)
where d1.dataType = 1
and d2.dataType = 2
于 2013-06-26T23:14:03.923 回答