在SQL中我的数据输出是
协议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表表示无序集(技术上是多集),因此除非列指定排序,否则没有排序。