[英]Pivot in SQL without Aggregate function
如果您的论据是“我只会有一个值或没有值,因此我不想要聚合”,请意识到有多个聚合,如果仅将一个值传递给聚合,则将返回该值作为他们的结果。 MIN
和MAX
浮现在脑海。 SUM
也适用于数字数据。
因此,指定没有聚合的PIVOT
的解决方案是在此处指定这种“通过”聚合。
基本上, PIVOT
内部的工作原理与GROUP BY
相同。 除了分组列在当前结果所有列设定为比的聚集体部分中提到的列之外 PIVOT
规范。 就像使用GROUP BY
1时SELECT
子句的规则一样,每列都必须是分组列或包含在聚合中。
1抱怨,抱怨,旧的mysql抱怨。 尽管默认值从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.