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;