【问题标题】:Pivot transactions to metrics将交易转为指标
【发布时间】:2019-01-04 23:01:44
【问题描述】:

有一个简单的方法可以做到这一点,我不记得了。我想避免 CASE 语句或其他按行操作的语句。

交易表

我希望它改造后的样子

我知道过去我已经这样做了大约一百万次,但我现在非常努力。我知道有一种有效的方法来解决这个问题。

谢谢

【问题讨论】:

  • 您是否需要按该顺序显示所需输出中的记录?如果是,排序逻辑是什么?
  • 不,排序顺序无关紧要。只需旋转表格,使其看起来像后期转换示例。

标签: sql-server tsql sql-server-2014


【解决方案1】:

pivot 语法中,您可以使用row_number() 窗口函数强制枢轴保持样本数据中的记录数。 over子句中指定的order by只是为了满足功能需求。

select p.client
, isnull(p.Calls, 0) as Calls
, isnull(p.Orders, 0) as Orders
, isnull(p.OrdRev, 0) as OrdRev
, isnull(p.WebOrde, 0) as WebOrde
from (
    select a.client
    , isnull(a.cType, 'Calls') as cType
    , a.responses
    , row_number() over (order by a.client asc) as row_nbr
    from transaction_table as a
    )  as t
pivot(max(t.responses) for t.cType in ([Calls],[Orders],[OrdRev],[WebOrde])) as p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2020-03-15
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多