sql-server - 如何将 Pivot 与 RowNumber 和日期一起使用
问题描述
我有一个这样的 SQL Server 表:
如何根据行号将阅读列更改为 2 列?
我试过这样:
WITH pivot_data AS
(
SELECT
date, CurrentMeterSNID,
1 + ((ROW_NUMBER() OVER (PARTITION BY CurrentMeterSNID ORDER BY date desc) - 1) % 2) rownum,
Reading
FROM
INF_Facility_ElectricalRecord
)
SELECT
date, CurrentMeterSNID, [1], [2]
FROM
pivot_data
PIVOT
(MAX(Reading) FOR rownum IN ([1], [2])) AS p;
但我得到的结果是:
我得到空记录;如何用日期后一天的记录替换该空值?
解决方案
只要您在该查询中显示每个日期,您就无法获得所需的内容。因此,您必须选择 max(date),换句话说,rownumber 将为 1。
WITH pivot_data AS(
SELECT date,CurrentMeterSNID,
1 + ((row_number() over(partition by CurrentMeterSNID ORDER by date desc) - 1) % 2) rownum,
Reading
FROM dbo.Table_1 )
, T2 AS
(
SELECT CurrentMeterSNID, date, [1], [2]
FROM pivot_data PIVOT (max(Reading) FOR rownum IN ([1],[2])) AS p
)
SELECT CurrentMeterSNID, Max(date), MAX([1]), Max([2])
FROM T2
GROUP BY CurrentMeterSNID
推荐阅读
- python - 如何从 views.py 文件中的 models.py 文件中获取任何特定字段?
- textinput - 谷歌助手文本输入
- webforms - 在 asp.net 中,使用 Page.LoadControl(path) 从另一个 Web 用户控件中加载 Web 用户控件
- typescript - 为 BelongsToMany 关联续集连接表列名称
- swift - SwiftUI:有些按钮出现,有些不出现 - MacOS 菜单栏应用程序
- node.js - 无法弄清楚如何在 Sequelize.js ORM 中创建表与其自身之间的多对多关系
- flutter - 如何在具有圆形边界的容器内居中图标小部件
- c# - 表单下载数据 OnStart() 或 OnAppearing()
- c# - 如何将 ComboBoxItem 设置为从其中的按钮中选择?
- javascript - 为什么for循环语句在django模板中不起作用