使用先前计算的值而不是使用聚合函数的SQL pivot

时间:2015-01-14 18:31:51

标签: sql-server dataset pivot iif

我正在使用数据集,并且我需要计算概率过去几年的某些天。以下是数据集的外观:

ID   STATION ID   DATE         ELEMENT ID   00     01     02     03......23
1    6106000      2009-05-11   110          2550   900    1050   1550    3000
2    6106000      2009-05-12   110          380    1400   1550   5090    200
3    6106000      2009-05-13   110          500    1250   800    3550    4020

我无法在数据透视表中找到显示所需值的方法。这是我在SQL中的内容:

SELECT * FROM
(SELECT 
Convert(char(15),[DATE],107) AS 'Date',
Format([DATE],'MMM dd') AS 'Day',
Probability = Cast(Round(((
IIf([00]>1410,1,IIf([00]=0,1,0)) + 
IIf([01]>1410,1,IIf([01]=0,1,0)) + 
IIf([02]>1410,1,IIf([02]=0,1,0)) + 
IIf([03]>1410,1,IIf([03]=0,1,0)) + 
IIf([04]>1410,1,IIf([04]=0,1,0)) + 
IIf([05]>1410,1,IIf([05]=0,1,0)) + 
IIf([06]>1410,1,IIf([06]=0,1,0)) + 
IIf([07]>1410,1,IIf([07]=0,1,0)) + 
IIf([08]>1410,1,IIf([08]=0,1,0)) + 
IIf([09]>1410,1,IIf([09]=0,1,0)) + 
IIf([10]>1410,1,IIf([10]=0,1,0)) + 
IIf([11]>1410,1,IIf([11]=0,1,0)) + 
IIf([12]>1410,1,IIf([12]=0,1,0)) + 
IIf([13]>1410,1,IIf([13]=0,1,0)) + 
IIf([14]>1410,1,IIf([14]=0,1,0)) + 
IIf([15]>1410,1,IIf([15]=0,1,0)) + 
IIf([16]>1410,1,IIf([16]=0,1,0)) + 
IIf([17]>1410,1,IIf([17]=0,1,0)) + 
IIf([18]>1410,1,IIf([18]=0,1,0)) + 
IIf([19]>1410,1,IIf([19]=0,1,0)) + 
IIf([20]>1410,1,IIf([20]=0,1,0)) + 
IIf([21]>1410,1,IIf([21]=0,1,0)) + 
IIf([22]>1410,1,IIf([22]=0,1,0)) + 
IIf([23]>1410,1,IIf([23]=0,1,0)))/24.0)*100.0,0) AS int)
FROM 
ON_2
WHERE 
((([ELEMENT ID])=110) AND 
(([STATION ID])='6106000') AND 
((Day([DATE])) BETWEEN 1 AND 15) AND 
((DatePart("m",[DATE]))=12))) AS BaseData
PIVOT 
(MAX([Probability]) 
FOR [DATE] 
IN ([2000],[2001],[2002],[2003],[2004],[2005],[2006],[2007],[2008],[2009],[2010],[2011])) AS PivotTable

正如您所看到的,我正在SELECT部分​​中执行操作集,其中包括IIf statements和其他一些数学运算。获得我想要的值后,我将值分配给了'概率'这是我在 PIVOT部分中使用的值,但我的结果如下:

Day     2000  2001  2002  2003....2011
Dec 01  NULL  NULL  NULL  NULL....NULL
Dec 02  NULL  NULL  NULL  NULL....NULL
Dec 03  NULL  NULL  NULL  NULL....NULL
.
.
Dec 15  NULL  NULL  NULL  NULL....NULL

我已经测试了IIf计算和所有数学计算。我能够获得我想要的数字,但是当我将其翻译成数据透视表时,我看不到这些值,只能看到NULL。

非常感谢你的帮助,谢谢你的时间!

1 个答案:

答案 0 :(得分:2)

你需要使用

  datepart(year, date) 

而不是

  Convert(char(15),[DATE],107) AS 'Date'