Sql 如何通过select查询复制和合并行

Sql 如何通过select查询复制和合并行,sql,postgresql,Sql,Postgresql,我有一个现有的Postgresql select查询输出 +------+------------+------+------+ | Type | ID | Pass | Fail | +------+------------+------+------+ | IQC | ABC_IQC_R2 | 0 | 6 | +------+------------+------+------+ | IQC | ABC_IQC_R1 | 2 | 6 | +----

我有一个现有的Postgresql select查询输出

+------+------------+------+------+
| Type | ID         | Pass | Fail |
+------+------------+------+------+
| IQC  | ABC_IQC_R2 | 0    | 6    |
+------+------------+------+------+
| IQC  | ABC_IQC_R1 | 2    | 6    |
+------+------------+------+------+
| IQC  | ABC_IQC    | 498  | 8    |
+------+------------+------+------+
如何将ID->ABC_IQC的行复制为两行,同时将R1和R2值合并到该行中?(如下图所示)

我能想到的两种逻辑是,

  • 通过ID搜索ABC(但我不确定如何匹配它们)。复制行ABC_IQC&然后使用横向连接合并它们(仍不确定如何合并)

  • 从R2和R1复制ABC_IQC(ID列)的一列(现在成为R_ID)。搜索原始ABC_IQC行的ID,并将通过和失败的值提取到R2和R1行中

  • 这是我的当前查询,用于获取初始查询输出

    SELECT
      split_part(NewLotID, '_', 2) AS "Type",
      LotSummary ->> 'ID' AS "ID",
      LotSummary ->> 'Pass' AS "Pass",
      LotSummary ->> 'Fail' AS "Fail"
    FROM
    (
      SELECT
        LotSummary,
        regexp_replace(LotSummary ->> 'ID','[- ]','_','g') AS NewLotID
    .
    .
    .
    

    我不希望得到完整的答案,因为我几乎没有提供任何代码,只是提供了任何可能有用的想法或见解!提前谢谢你。

    我想你想加入

    with q as (
          <your query here>
         )
    select q.type, q.id, qr.id as r_id, q.pass, q.fail,
           qr.pass as r_pass, qr.fail as r_fail
    from q join
         q qr
         on q.id = 'ABC_IQC' and qr.id like 'ABC_IQC_%';
    
    ,其中q为(
    )
    选择q.type、q.id、qr.id作为r\U id、q.pass、q.fail、,
    合格为合格,不合格为不合格
    从q连接
    qqr
    on q.id='ABC_IQC'和类似'ABC_IQC%'的qr.id;
    
    实际上,您可以概括如下:

    with q as (
          <your query here>
         )
    select q.type, q.id, qr.id as r_id, q.pass, q.fail,
           qr.pass as r_pass, qr.fail as r_fail
    from q join
         q qr
         on q.id ~ '^[^_]+_[^_]+$' and
            qr.id like q.id || '_%';
    
    ,其中q为(
    )
    选择q.type、q.id、qr.id作为r\U id、q.pass、q.fail、,
    合格为合格,不合格为不合格
    从q连接
    qqr
    关于q.id~'^[^33;]+[^33;]+$和
    qr.id喜欢q.id | |‘%’;
    
    非常感谢戈登!你过去帮过我,现在帮过我。非常感谢!
    with q as (
          <your query here>
         )
    select q.type, q.id, qr.id as r_id, q.pass, q.fail,
           qr.pass as r_pass, qr.fail as r_fail
    from q join
         q qr
         on q.id ~ '^[^_]+_[^_]+$' and
            qr.id like q.id || '_%';