【发布时间】:2019-06-19 05:05:11
【问题描述】:
我有一张我想重新塑造的桌子,目前看起来像这样:
ID Year Channel Payments
1 2012 HV 100
1 2014 HV 56
2 2012 NL 17000
2 2012 HV 495
3 2013 HV 565
等等...有很多行。
我需要重新调整数据,以便每个 ID 有一行,并且多列显示每个年份和渠道中的付款。例如,上表如下所示:
ID HV2012 HV2013 HV2014 NL2012
1 100 NULL 56 NULL
2 495 NULL NULL 17000
3 NULL 565 NULL NULL
过去我在 R 中使用 dplyr 很容易做到这一点,但现在需要使用 SQL 服务器。我无法找到一种方法来执行此操作,而无需指定每个新列的名称——因为我的数据涵盖了许多频道和年份,这实际上并不可行。我知道它可能需要动态 SQL,但我没有使用它的经验。
谢谢
【问题讨论】:
-
你为什么觉得你需要这样做?这不是一个很好的设计模式,每年您都必须向表中添加列(并删除旧的?)。你的桌子看起来很好。
-
Honeybadger - 我知道这似乎不太明智,但对于需要这种形状的数据的下游分析来说,它肯定是必需的。不幸的是,更改所有后续分析需要很长时间。
-
@rw2 我已更新答案以将结果保存在临时表中。如果您认为它有用且正确,请您接受。
标签: sql-server pivot dynamic-sql