条件和应用公式

时间:2013-06-26 14:45:15

标签: sql sql-server tsql

我有两张桌子。

表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以及每个CountryID(来自##medianTemp1表),其值'0'ProductID+1将{{1} }}。

对于这个成立的1(对于年份和每个国家,它将是不同的)我们应该使用来自productID表的值来应用公式。 ##MedianTemp2

我知道我的描述有点奇怪......但不知道如何更好地描述我的问题。

1 个答案:

答案 0 :(得分: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

要进行最终计算,请再次使用上述方法,即:

  • 取消表格## MedianTemp2
  • 在productid + 1和productid + 2上应用连接两次以对值进行求和

我想你会明白这一点。 F5样本+1。:)。