别名数据透视列

Posted

技术标签:

【中文标题】别名数据透视列【英文标题】:aliasing pivot column 【发布时间】:2020-06-03 10:56:00 【问题描述】:

我正在尝试将数据透视列别名为方案 1、方案 2、方案 3,而不是 1、2、3。我遇到了错误。

select *
from (select *
      from (select s.campaign_id campaign_id, s.scenario_index scenario_index 
            from scenario s, campaign c where s.campaign_id = c.campaign_id)
      pivot (max(scenario_index)for scenario_index in (1,2,3))
     )a 

谢谢,现在聚合给出了带有别名的结果。我的要求是将这些列与另一个查询结合起来,即

select  CASE WHEN AWARD_TYPE = 0 THEN award_rate||' points'
                                        when AWARD_TYPE = 1   then Award_rate||' %'
                                        when award_type=2  then RATIO_POINTS||' points per '||RATIO_MON_UNIT||' AED' End
                            from  points_rule p
                            where c.pt_basic_rule_id = p.point_rule_id ) as pool_awards, 

此查询以列形式出现,然后方案 1、2,3 应以 3 列形式出现,其中 pool_award 的值基于campaign_id

【问题讨论】:

你为什么选择不使用正确的、明确的、标准的、可读的JOIN语法? 您有几个选项可以在 pivot 中添加别名,例如here。 提供样本数据和期望的结果。 【参考方案1】:

只使用条件聚合:

select s.campaign_id,
       max(case when scenario_index = 1 then 1 end) as scenario1,
       max(case when scenario_index = 2 then 1 end) as scenario2,
       max(case when scenario_index = 3 then 1 end) as scenario3
from scenario s join
     campaign c 
     on s.campaign_id = c.campaign_id
group by campaign_id;

【讨论】:

谢谢,它给出了与列别名相同的结果,我的要求是将这些列与另一个查询结合起来选择 CASE WHEN AWARD_TYPE = 0 THEN Award_rate||'积分'当 AWARD_TYPE = 1 然后 Award_rate||' %' 当 Award_type=2 时 RATIO_POINTS||'每个“||RATIO_MON_UNIT||”的点数AED' End from points_rule p where c.pt_basic_rule_id = p.point_rule_id ) as pool_awards【参考方案2】:

您可以在PIVOTIN 子句中使用别名,如下所示:

select *
from (select *
      from (select s.campaign_id campaign_id, s.scenario_index scenario_index 
            from scenario s, campaign c where s.campaign_id = c.campaign_id)
      pivot (max(scenario_index)for scenario_index in (1 as scenario1,2 as scenario2,3 as scenario3))
     )a 

【讨论】:

以上是关于别名数据透视列的主要内容,如果未能解决你的问题,请参考以下文章

Excle数据透视表如何在数据透视表顶部显示列总计数据

是否可以使用 SQL Server 使用相同的数据透视列进行多个数据透视

请教SQL server 中pivot的详细用法及语法规则

使用 PIVOT 和 UNPIVOT实现查询结果行转列

使用 VBA 代码从数据列创建数据透视的问题

laravel4 更新数据透视表中的附加列