【发布时间】:2019-09-30 09:41:40
【问题描述】:
我正在处理 SQL 查询并使用运算符 PIVOT、IN 和子句 WHERE。当我完成后,注意到我的 SQL 脚本以不同的方式对某些列(在这种情况下为列 ANGLE_1)进行排序,请帮助我找出问题所在。
SQL查询:
SELECT *
FROM (
SELECT
row_number() over (Partition By [PARAMETER_NAME] Order by [PARAMETER_VALUE]) as new
,[PARAMETER_NAME]
,[PARAMETER_VALUE]
FROM [dbo].table
where [EXCHANGE_HEADER_ID] in ('1', '2')
)
as s
pivot (
min([PARAMETER_VALUE])
FOR [PARAMETER_NAME] IN ( DMX
,TYPE
,UNBALANCE_1
,ANGLE_1
,UNBALANCE_2
,ANGLE_2
,STATUS
) )AS PVT
表[dbo].table:
ID CREATED PARAMETER_NAME PARAMETER_VALUE EXCHANGE_HEADER_ID
1 2016-09-09 11:39:21.3927453 TYPE TYPE 3 1
2 2016-09-09 11:39:21.3927453 UNBALANCE_1 0.094 1
3 2016-09-09 11:39:21.3927453 ANGLE_1 95.7 1
4 2016-09-09 11:39:21.3927453 UNBALANCE_2 0.195 1
5 2016-09-09 11:39:21.3927453 ANGLE_2 135.8 1
6 2016-09-09 11:39:21.3927453 STATUS 0 1
7 2016-09-09 11:39:21.3927453 DMX 75044500454391206509-A1625300635 1
8 2016-09-09 11:39:21.3927453 MACHINE 442002 1
9 2016-09-09 11:39:21.3927453 DATE 2016-09-09 11:39:13 1
10 2016-09-09 23:20:27.2773565 TYPE TYPE 3 2
11 2016-09-09 23:20:27.2773565 UNBALANCE_1 0.826 2
12 2016-09-09 23:20:27.2773565 ANGLE_1 229.6 2
13 2016-09-09 23:20:27.2773565 UNBALANCE_2 0.835 2
14 2016-09-09 23:20:27.2773565 ANGLE_2 198.1 2
15 2016-09-09 23:20:27.2773565 STATUS 0 2
16 2016-09-09 23:20:27.2773565 DMX 75044500454391206509-A1625301504 2
17 2016-09-09 23:20:27.2773565 MACHINE 442002 2
18 2016-09-09 23:20:27.2773565 DATE 2016-09-09 23:20:02 2
输出:
new DMX TYPE UNBALANCE_1 ANGLE_1 UNBALANCE_2 ANGLE_2 STATUS
1 750.. TYPE 3 0.094 229.6 0.195 135.8 0
2 750.. TYPE 3 0.826 95.7 0.835 198.1 0
预期输出:
new DMX TYPE UNBALANCE_1 ANGLE_1 UNBALANCE_2 ANGLE_2 STATUS
1 750.. TYPE 3 0.094 95.7 0.195 135.8 0
2 750.. TYPE 3 0.826 229.6 0.835 198.1 0
正如您在上面看到的,问题在于 ANGLE_1 包含错误的值,可能是因为附加列 row_number() over (Partition By [PARAMETER_NAME] Order by [PARAMETER_VALUE]) as new ?。谢谢你的帮助
【问题讨论】:
标签: sql sql-server sql-server-2012 pivot