计算UNPIVOT中两列之间的差

问题描述 投票:1回答:1

[我正在尝试执行UNPIVOT,但是我的一列实际上是两列之间的区别,SSMS不接受将其作为创建未透视字段的值之一。

示例:

UNPIVOT(                                                                                                 
        Points
        for PointType in (                                                                                   
                          HomeTeamPoints
                        , (HomeTeamPoints - TotalPoints)
                        , TotalPoints

        ) as pnts

如果我注释掉差异字段,这将非常有效,但是一旦输入了该字段,它就会告诉我“((')附近的语法不正确。一旦删除括号,它就会显示“'-'附近的语法不正确”]

谁知道有没有办法做到这一点?

非常感谢

sql sql-server pivot ssms unpivot
1个回答
4
投票

请勿使用unpivot。使用apply

select v.*
from t cross apply
     (values ('HomeTeamPoints', HomeTeamPoints),
             ('Diff', HomeTeamPoints - TotalPoints),
             ('TotalPoints', TotalPoints)
     ) v(which, points);

unpivot是仅做一件事的定制语法。 apply实现lateral join。这些是非常强大的联接类型,并且是标准的一部分。 [P0]只能作为开始操作。

© www.soinside.com 2019 - 2024. All rights reserved.