【问题标题】:How to duplicate and merge rows through select query如何通过选择查询复制和合并行
【发布时间】:2020-12-09 01:46:00
【问题描述】:

我有一个现有的 Postgresql 选择查询输出给我,

+------+------------+------+------+
| 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 值合并到该行中? (如下图)

+------+---------+------------+------+------+--------+--------+
| Type | ID      | R_ID       | Pass | Fail | R_Pass | R_Fail |
+------+---------+------------+------+------+--------+--------+
| IQC  | ABC_IQC | ABC_IQC_R2 | 498  | 8    | 0      | 6      |
+------+---------+------------+------+------+--------+--------+
| IQC  | ABC_IQC | ABC_IQC_R1 | 498  | 8    | 2      | 6      |
+------+---------+------------+------+------+--------+--------+

我能想到的两个逻辑是,

  1. 遍历 ID 以搜索 ABC(但我不确定如何匹配它们)。复制 ABC_IQC 行,然后使用横向连接合并它们(仍然不确定如何)

  2. 从 R2 和 R1(现在成为 R_ID)复制 ABC_IQC(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
.
.
.

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

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    我想你想要join:

    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_%';
    

    您实际上可以概括这一点:

    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 || '_%';
    

    【讨论】:

    • 非常感谢戈登!你过去帮助过我,现在也帮助过我。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多