sql-server - 在 Pivot 中如何消除重复项
问题描述
转动前
Year | RainDays |
-------+----------+
2012 | 112 |
2013 | 116 |
2014 | 111 |
2015 | 80 |
2016 | 110 |
2017 | 102 |
2018 | 80 |
2019 | 110 |
旋转后
2012 | 2013 | 2014 | 2015 | 2016 | 2017| 2018 | 2019 |
-----+------+------+------+------+------+------+------+
112 | 116 | 111 | 80 | 110 | 102 | 0.0 | 0.0 |
如果任何数字在枢轴中第二次重复,则应设为 0.0
下面是枢轴的SQL
SELECT [1], [2], [3], [4], [5], [6], [7]
FROM
(
Select row_number () over(Order by [Year] asc) Rn,Raindays
from Rain
) AS SourceTable
PIVOT
(
Max(Raindays)
FOR Rn IN ( [1], [2], [3], [4], [5], [6], [7])
) AS PivotTable
解决方案
您可以尝试如下使用ROW_NUMBER()
.
;with cte as
(
select *, ROW_NUMBER() over(partition by raindays order by year) rn
from @mytable
)
SELECT *
FROM
(
select Year, case when rn >1 then 0 else RainDays end as RainDays from cte
)t
PIVOT
(
max(RainDays)
FOR Year IN ([2012], [2013], [2014], [2015], [2016],[2017],[2018],[2019])
) AS PivotTable;
输出
+------+------+------+------+------+------+------+------+
| 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 |
+------+------+------+------+------+------+------+------+
| 112 | 116 | 111 | 80 | 110 | 102 | 0 | 0 |
+------+------+------+------+------+------+------+------+
推荐阅读
- django - 无法在 django 的数据库中存储散列密码
- influxdb - 无法计算 InfluxDB 中的拒绝率
- r - 在数据框中输入其他行作为相邻现有行的值之间的中点
- mysql - 如何从具有相同列/字段名称的表上的连接结果轻松创建表
- python - 如何访问 Python 创建的字典
- nativescript - Nativescript - 按下通知时如何将应用程序置于前台
- javascript - 制表符不是函数
- ruby - 如何获取简单 Sequel Dataset 对象的表名?
- here-api - HereMaps API 端点返回带有换行符的 json
- laravel - Laravel 邮政编码查询