2013-06-26 46 views
0

我想將包含兩個變量的單個列轉換/重新組合爲具有相同索引的兩列,並計算這些變量之間的差異。對數據透視表進行SQL更新並計算新列數

下表定義顯示兩個不同的數據類型通過類別,國家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+類別。儘管有相當多的研究,但我正在努力實現(顯然)所需的自聯接。請讓我知道,如果你有任何問題。謝謝!

回答

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 
+0

謝謝,有道理。在所有指數中確實有兩種類型的數據。我將如何調整你的select語句來更新新的(仍然是空的)列dataType2values&type1-type2values? – Stefan

+0

您可以使用'select'語句作爲'insert'的一部分,用查詢結果填充表格。我已經更新了我的回答來證明這一點。 – Barmar

+0

或者用'create table',我已經改變了。 – Barmar