【问题标题】:Calculating a difference between two columns within an UNPIVOT计算 UNPIVOT 中两列之间的差异
【发布时间】:2019-11-13 21:42:07
【问题描述】:

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

例子:

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

        ) as pnts

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

有人知道有没有办法解决这个问题?

非常感谢

【问题讨论】:

  • 炸弹是指它给出错误吗?如果是这样,错误是什么?
  • 是的,对不起。如果我有括号说“'('附近的语法不正确”,如果我删除括号它说“'-'附近的语法不正确”

标签: sql sql-server pivot ssms unpivot


【解决方案1】:

不要使用unpivot。使用apply

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

unpivot 是只做一件事的定制语法。 apply 实现横向连接。这些是非常强大的连接类型,并且是标准的一部分。取消透视只是您可以使用apply 做的事情的开始。

【讨论】:

  • 就是这样!就像我想要的那样工作!非常感谢...绝对把它藏在我的武器库里,并阅读何时使用哪个
  • 你想出了一些我见过的最好的解决方案戈登!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2013-09-25
  • 1970-01-01
  • 2020-01-02
相关资源
最近更新 更多