【问题标题】:Transposing a column of data in SQL在 SQL 中转置一列数据
【发布时间】:2021-01-13 15:14:49
【问题描述】:

在 SQL 中,我的数据输出是

Agreement ID ProductStatus
125 A
125 C
125 N

我想将其视为

Agreement ID ProductStatus
125 A,C, N

Agreement ID ProductStatus1 ProductStatus2 ProductStatus3
125 A C N

我尝试了一些简单的枢轴,但值 a、c 和 n 每次都可以是不同的随机值。 有人可以帮忙吗?

【问题讨论】:

  • 您使用的是什么 rdbms?什么版本?
  • 您使用的是什么版本的 SQL 技术? MSSQL、MYSQL 还是其他?
  • 啊是的应该提到 - SSMS 15

标签: sql


【解决方案1】:

您可以使用 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

【讨论】:

    【解决方案2】:

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

    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 表表示 无序 集(嗯,从技术上讲是多集),因此除非列指定排序,否则没有排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 2018-03-19
      相关资源
      最近更新 更多