计算 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.

执行的操作的开始