gpt4 book ai didi

sql - 如何在交叉表中获取多列

转载 作者:行者123 更新时间:2023-12-04 10:50:07 26 4
gpt4 key购买 nike

我想要下表中的交叉表。

enter image description here

交叉表应如下所示

enter image description here

数据透视表似乎不能解决问题,因为一次只能使用一列。但在我们的例子中,我们正在处理 4 个不同的列。 (付费、月、年、免费)
我通过将这 4 列拆分为四个不同的数据透视表,使用临时表并最终重新组装获得的数据来解决该问题。但这很复杂,又长又困惑,总之不是很好......
年份和月份应以升序形式显示,正如您在上面的交叉表中看到的那样。

我一直在寻找解决方案很长一段时间,但我在任何地方都找不到相同的问题。
如果有人能给我一个简短而优雅的解决方案,我将不胜感激。

http://www.sqlfiddle.com/#!18/7216f/2你可以看到问题定义。

谢谢!

最佳答案

您可以使用 row_number() 在子查询中按日期对记录进行排名,然后使用条件聚合进行透视:

select
ClientId,
max(case when rn = 1 then Payment end) Payment1,
max(case when rn = 2 then Payment end) Payment2,
max(case when rn = 3 then Payment end) Payment3,
max(case when rn = 1 then [Month] end) Month1,
max(case when rn = 2 then [Month] end) Month2,
max(case when rn = 3 then [Month] end) Month3,
max(case when rn = 1 then [Year] end) Year1,
max(case when rn = 2 then [Year] end) Year2,
max(case when rn = 3 then [Year] end) Year3,
max(case when rn = 1 then FreeOfCharge end) FreeOfCharge1,
max(case when rn = 2 then FreeOfCharge end) FreeOfCharge2,
max(case when rn = 3 then FreeOfCharge end) FreeOfCharge3
from (
select
t.*,
row_number() over(partition by ClientId order by [Year], [Month]) rn
from mytable t
) t
group by ClientId

关于sql - 如何在交叉表中获取多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59523637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com