在SQL中转置一列数据



在SQL中我的数据输出是

tbody> <<tr>
协议ID 产品状态
125
125 C
125 N

可以使用group_concat函数。您的查询将像这样

SELECT agreement_id, group_concat(Product_Status)
FrOM mytable
group by agreement_id

这是针对MySQL的,对于其他数据库,您可以搜索该特定数据库的group_concat替代函数。看来你是新来的数据库。您可以使用此参考来了解更多信息。https://www.mysqltutorial.org/basic-mysql-tutorial.aspx

如果使用条件聚合可以在不同列中获得三个值:

select agreementid,
       max(case when seqnum = 1 then ProductStatus end) as ProductStatus_1,
       max(case when seqnum = 2 then ProductStatus end) as ProductStatus_2,
       max(case when seqnum = 3 then ProductStatus end) as ProductStatus_3
from (select t.*,
             row_number() over (partition by agreementid order by agreementid) as seqnum
      from t
     ) t
group by agreementid;

创建列表的SQL标准是:

select agreementid,
       list_agg(ProductStatus, ',') within group (order by productstatus) as productstatuses
from t
group by agreementid;

这个函数在不同的数据库中有不同的名称。

在这两种情况下,列表的列或元素的顺序都是不确定的。SQL表表示无序集(技术上是多集),因此除非列指定排序,否则没有排序。

相关内容

  • 没有找到相关文章

最新更新