SQL查询以获得如下结果
转换如下: 结果应该是这样SQL查询以获得如下结果,sql,pivot,Sql,Pivot,转换如下: 结果应该是这样 id name Content 1 abc khsdchdcdhkj 1 abc kjwdfwvkkvj 1 abc poiwejefoefoen 2 def oiwejfioweocwnf 2 def liweenfowejnvouer 2 def oiewjvoivoewfoiff 3 ghi oljevnjoernvjeno 3 ghi oinrevoinew
id name Content
1 abc khsdchdcdhkj
1 abc kjwdfwvkkvj
1 abc poiwejefoefoen
2 def oiwejfioweocwnf
2 def liweenfowejnvouer
2 def oiewjvoivoewfoiff
3 ghi oljevnjoernvjeno
3 ghi oinrevoinewovoewfio
3 ghi oljewnfjewnfjwenfjef
4 xyz ojnwefojnweuofoioinvc
4 xyz kjnwefjonwefojoojn
4 xyz oijdofijweoifjoijiojwfvn
您可以使用条件聚合和行数:
注意:SQL表表示无序集。因此,这三列的顺序是按内容排列的。如果需要另一个排序,则需要在列中包含有关所需排序的信息。您可以使用组目录和子字符串索引来实现这一点
如果有3个以上的值,您只需添加另一个SELECT并在最内层的子字符串中增加数字,如:SUBSTRING_INDEXSUBSTRING_INDEXGROUP_CONCATCENT ORDER BY Content4尝试了此查询SELECT*from SELECT id,name,group_concatcontent group by id来自测试d枢轴,以id、名称、内容作为piv进行区分;
id name Content1 Content2 Content 3
1 abc khsdchdcdhkj kjwdfwvkkvj poiwejefoefoen
2 def oiwejfioweocwnf liweenfowejnvouer oiewjvoivoewfoiff
select id,
max(case when seqnum = 1 then content end) as content1,
max(case when seqnum = 2 then content end) as content2,
max(case when seqnum = 3 then content end) as content3
from (select t.*,
row_number() over (partition by id order by content) as seqnum
from t
) t
group by id
SELECT id,
name,
SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 1) AS Content1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 2), ',', -1) AS Content2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(Content ORDER BY Content), ',', 3), ',', -1) AS Content3
FROM table_name
GROUP BY id, name;