繁体   English   中英

不带聚合功能的SQL中的数据透视

[英]Pivot in SQL without Aggregate function

我有一种情况,我有一张桌子

表格检视

我想要的输出是

如果您的论据是“我只会有一个值或没有值,因此我不想要聚合”,请意识到有多个聚合,如果仅将一个值传递给聚合,则将返回该值作为他们的结果。 MINMAX浮现在脑海。 SUM也适用于数字数据。

因此,指定没有聚合的PIVOT的解决方案是在此处指定这种“通过”聚合。

基本上, PIVOT内部的工作原理与GROUP BY相同。 除了分组列在当前结果所有列设定为的聚集体部分中提到的列之外 PIVOT规范。 就像使用GROUP BY 1SELECT子句的规则一样,每列必须是分组列或包含在聚合中。


1抱怨,抱怨,旧的抱怨。 尽管默认值从5.7.5起更为合理。

尝试这个:

演示

with cte1 as
(
select 'Web' as platformname,'abc' as productname,'A' as grade
union all
select 'Web' ,'cde' ,'B'
union all
select 'IOS' ,'xyz' ,'C'
union all
select 'MAX' ,'cde' ,'D'
)
select  productname,[Web], [IOS], [Android],[Universal],[Mac],[Win32]
from    cte1 t
        pivot
        (
            max(grade)
            for platformname in ([Web], [IOS], [Android],[Universal],[Mac],[Win32])
        ) p

您可以使用join来“透视”此类数据:

select p.productname,
       t_win32.grade as win32,
       t_universal.grade as universal,
       . . .
from products p left join -- assume you have such a table
     t t_win32
     on t_win32.product_name = p.productname and t_win32.platform = 'Win32' left join
     t t_universal
     on t_universal.product_name = p.productname and t_universal.platform = 'Universal'  left join
     . . . 

如果您没有表格products ,请改用派生表格:

from (select distinct product_name from t) p left join
     . . .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM