繁体   English   中英

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

SQL pivot with values calculated previously rather than using aggregate function

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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 个回复

你需要使用

  datepart(year, date) 

代替

  Convert(char(15),[DATE],107) AS 'Date' 
1 具有计算的聚合函数的PIVOT

我正在尝试生成一些报告,这些报告显示每个月的计算值,其中月份值是列。 基本查询很好地将月份报告为行: 但是,如果我尝试透视表,则会始终出现ORA-56902错误:“期望透视函数内有聚合函数”: 有没有办法让PIVOT将ROUND(SUM(REVENUE)/ SUM(HEAD ...

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

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

3 在SQL中而不是在Excel中“枢轴”

我是SQL的新手,已经迷惑了一段时间的图形编辑器,但是我尝试通过一些更高级的项目来进行改进... 目前,我将数据提取到Excel中,然后运行数据透视表。 我想重新创建它,但是让SQL创建“ Pivot”,然后立即在Excel中给出结果。 简单来说,我有一张表格的标题(其中包括其他标 ...

4 聚合函数(小)返回零而不是最小值

我正在使用excel的聚合(小)函数来查找列中出现的每个名称的最小值。 问题是下面的公式在B中有值的地方只返回0。 我正在使用的公式是 其中B包含我想要的最小值的数据,A包含识别字符串。 我感谢您提供的任何帮助! ...

5 使用SQL函数而不是SELECT的优点

在Postgresql 9.0数据库中,我可以使用WHERE子句中的整数(profile_id)为带有SELECT语句的网页创建URL。 在过去,我只是在方便时完成SELECT,例如使用子查询作为视图中的列/字段。 但我最近意识到我可以创建一个SQL函数来做同样的事情。 (这是一个SQ ...

6 没有聚合功能的SQL Server中的PIVOT

我有一个像这样的表(叫它T1 ): 请注意, Data是浮点数,而不是顺序数,我只是这样写的,因此更容易看到它们在结果中的位置。 还有一个表格将Category编号转换为名称(让我们说( T2 ): 我想返回一个查询: 我考虑过尝试使用以前从未使用过的PIVOT ,但是 ...

8 在计算字段中使用聚合函数

我有一个在SQL Server Management Studio上运行正常的查询,除了int无条件地转换为float(我不确定这是否重要)。 当我尝试在Visual Studio 2012中运行它时,它会在计算字段中抛出有关聚合函数的错误。 我在查询上尝试了很多变化,但事实上它适用于一 ...

10 不使用聚合且不知道单元格值的SQL Pivot

我有这张桌子: 我需要这个: 但是,我并不总是知道“名称”或“值”列数据是什么。 但它在我的select语句中将始终在相同的列号中 我已经尝试过使用数据透视,但是我无法解决没有聚合函数的情况 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM