2013-06-26 45 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。我们不:)。我只是用它来格式化。 –