我正在使用数据集 ,因此需要计算过去几年中的某些天的概率 数据集如下所示:

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楼 票数:2 已采纳

你需要使用

  datepart(year, date) 

代替

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

  ask by Oscar Duran translate from so

未解决问题?本站智能推荐:

1回复

#在Iif-Statement中使用RowCount时出错(如果Countrows = 0)

请查看我的以下声明: 这是我的文本框后面的表达式。 * 情况1:*如果我的TdsTemp包含多于1行,则会显示正确的数据。 * 情况2:*如果我的TdsTemp包含0行,那么我得到以下msg #Error而不是预期的NoResults 。 我似乎无法弄清楚我在做什么错。
1回复

将 PIVOT 与没有聚合函数的 SQL Server 结合使用

我坚持在一个简单的例子中使用PIVOT (我在下面给出了完整的例子)。 完全披露,我是从https://www.hackerrank.com/得到的。 我选择它正是因为我想更熟悉PIVOT ,这看起来像一个简单的例子! 我看过很多关于这个主题的帖子,并一直在用它来扼杀: https : //soci
3回复

是否有比嵌套iif更简单的方法来计算SQL Server中的不匹配条件

下图显示了一个帐户表和我要计算的结果。 即,每次帐号为106844且结果为“ MESSAGE”或“ ESCALATION EMAIL”时,其结果应计为1,而其他任何结果均应计为0。我通常要做的是将iif弄得一团糟 依此类推,但是老兄,感觉好像有一种更简单的方法,或者是一种不那么容易在第
1回复

选择某个项目,除非SQL Server中为null

我试图拉某个项目,除非第一个项目为空。 基本上我试图让它选择FA.ActioNDefID = 230除非那是NULL ,然后我希望它拉动FA.ActionDefID = 550 ,并且对于其他多个选择也是如此。 下面是我目前得到的,现在后者总是238,除非它是null,基本上我只想
1回复

将IIF语句从访问权限转换为T-SQL SQL Server(传递)

我有一个在Access 2013中创建它的更新查询。我有一个包含150万条记录的表,我试图运行一个更新查询,但是有时它要花很多时间,尤其是当我要更新数千行时。 因此,我发现我将在访问中使用传递选项,但是当我尝试这样做时,由于访问语法与SQL Server中的语法不同,因此在查询中出现语法错误。
2回复

我如何制作一个 IIF、ELSEIF 来比较空值和帐户

我正在尝试将 Field1 与 Field2 值进行比较,并包括在任一字段(或在某些情况下)中都存在 Null 的情况。 这是 iif,否则我想出了但一直抛出错误 从那里事情在嵌套中变得疯狂。 我开始认为最好在 SQL 中使用 CASE ,因为它更干净,但我不确定方法。
2回复

如何在SQL Server 2012中合并多个IIF语句

我试图在SQL Server的Select语句中合并以下IIF语句。 我将如何处理?
3回复

在 OPENQUERY 中使用 IIF 函数

当我运行此查询时,它返回消息 “[Sybase][ODBC 驱动程序][SQL Anywhere]第 1 行‘=’附近的语法错误”。 准备查询“SELECT Sum(IIf(Left(code,1)='C',1,0)) AS Cases FROM cases WHERE cases.dat