2013-06-26 46 views
1

我有兩個表。條件和應用公式

表1

CREATE TABLE ##MedianTemp1 (
    ProductID INT NOT NULL, 
    CountryCodeID INT NOT NULL, 
    Y1977 INT NULL, 
    Y1978 INT NULL, 
    Y1979 INT NULL PRIMARY KEY CLUSTERED (ProductID,CountryCodeID)) 

INSERT INTO ##MedianTemp1 VALUES 
(1, 100, 0, 0, 0), 
(2, 100, 0, 0, 0), 
(3, 100, 0, 0, 0), 
(4, 100, 0, 0, 0), 
(5, 100, 1, 0, 0), 
(6, 100, 1, 1, 0), 
(7, 100, 1, 1, 1), 
(8, 100, 1, 1, 1), 
(9, 100, 1, 1, 1), 
(1, 101, 0, 0, 0), 
(2, 101, 0, 0, 0), 
(3, 101, 0, 0, 0), 
(4, 101, 1, 0, 0), 
(5, 101, 1, 1, 0), 
(6, 101, 1, 1, 1), 
(7, 101, 1, 1, 1), 
(8, 101, 1, 1, 1), 
(9, 101, 1, 1, 1) 

表2

CREATE TABLE ##MedianTemp2 (
    ProductID INT NOT NULL, 
    CountryCodeID INT NOT NULL, 
    Y1977 FLOAT(53) NULL, 
    Y1978 FLOAT(53) NULL, 
    Y1979 FLOAT(53) NULL PRIMARY KEY CLUSTERED (ProductID,CountryCodeID)) 

INSERT INTO ##MedianTemp2 VALUES 
(1, 100, 5, 4, 1), 
(2, 100, 6, 3, 2), 
(3, 100, 1, 2, 4), 
(4, 100, 2, 1, 5), 
(5, 100, 6, 2, 6), 
(6, 100, 7, 3, 7), 
(7, 100, 1, 2, 3), 
(8, 100, 7, 1, 8), 
(9, 100, 9, 6, 9), 
(1, 101, 5, 4, 1), 
(2, 101, 6, 3, 2), 
(3, 101, 1, 2, 4), 
(4, 101, 2, 1, 5), 
(5, 101, 6, 2, 6), 
(6, 101, 7, 3, 7), 
(7, 101, 1, 2, 3), 
(8, 101, 7, 1, 8), 
(9, 101, 9, 6, 9) 

我需要創造這樣的:

##MedianResult (
    ProductID INT NOT NULL, 
    CountryCodeID INT NOT NULL, 
    Y1977 FLOAT(53) NULL, 
    Y1978 FLOAT(53) NULL, 
    Y1979 FLOAT(53) NULL 
    PRIMARY KEY CLUSTERED (ProductID,CountryCodeID)) 

查詢應該找每年只有一個ProductID和對於每個國家/地區ID(來自##medianTemp1表)將具有值'0'ProductID+1將具有1

對於此創建的productID(對於每年和每個國家它將會有所不同),我們應該使用##MedianTemp2表中的值應用公式。​​。

我知道我的描述有點奇怪......但不知道如何更好地描述我的問題。

回答

1
DROP TABLE #mt1 
GO 
-- first you need to bring your table to a usable format: 
select 
    productid, countrycodeid, 
    val, yr 
into #mt1 
from ##MedianTemp1 
unpivot (
    val for yr in (y1977, y1978, y1979) 
) y 


-- and here to find the products 
select 
    a.* 
    ,b.* 
from #mt1 a 
join #mt1 b 
    on a.productid+1=b.productid 
    and a.countrycodeid=b.countrycodeid 
    and a.yr=b.yr 
where 1=1 
    and a.val=0 
    and b.val=1 

爲了使最終的計算,再次使用上述方法,即:

  • unpivot的表## MedianTemp2
  • 施加連接上的productid兩次+ 1和的productid + 2總結值

我想你會弄清楚這一點。 +1爲F5樣本:)。

+0

Working prety cool!謝謝 只有一個問題,爲什麼我們在where子句中需要1 = 1? – Almazini

+0

@Almazini。我們不:)。我只是用它來格式化。 –