计算 UNPIVOT 中两列之间的差异
Calculating a difference between two columns within an UNPIVOT
我正在尝试执行 UNPIVOT,但我的其中一列实际上是两列之间的差异,SSMS 不接受它作为创建非透视字段的值之一。
示例:
UNPIVOT(
Points
for PointType in (
HomeTeamPoints
, (HomeTeamPoints - TotalPoints)
, TotalPoints
) as pnts
如果我注释掉差异字段,这将非常有效,但一旦它在其中,它就会告诉我 "incorrect syntax near '('"。一旦我删除括号,它就会显示 "Incorrect Syntax near '-'"
有人知道是否有办法让它通过吗?
非常感谢
不要使用 unpivot
。使用 apply
:
select v.*
from t cross apply
(values ('HomeTeamPoints', HomeTeamPoints),
('Diff', HomeTeamPoints - TotalPoints),
('TotalPoints', TotalPoints)
) v(which, points);
unpivot
是只做一件事的定制语法。 apply
实现了 横向连接 。这些是非常强大的连接类型,并且是标准的一部分。逆透视只是您可以使用 apply
.
执行的操作的开始
我正在尝试执行 UNPIVOT,但我的其中一列实际上是两列之间的差异,SSMS 不接受它作为创建非透视字段的值之一。
示例:
UNPIVOT(
Points
for PointType in (
HomeTeamPoints
, (HomeTeamPoints - TotalPoints)
, TotalPoints
) as pnts
如果我注释掉差异字段,这将非常有效,但一旦它在其中,它就会告诉我 "incorrect syntax near '('"。一旦我删除括号,它就会显示 "Incorrect Syntax near '-'"
有人知道是否有办法让它通过吗?
非常感谢
不要使用 unpivot
。使用 apply
:
select v.*
from t cross apply
(values ('HomeTeamPoints', HomeTeamPoints),
('Diff', HomeTeamPoints - TotalPoints),
('TotalPoints', TotalPoints)
) v(which, points);
unpivot
是只做一件事的定制语法。 apply
实现了 横向连接 。这些是非常强大的连接类型,并且是标准的一部分。逆透视只是您可以使用 apply
.