Postgresql :如何使用SQL查询重新设计遗留表?

Postgresql : How to rework legacy table with SQL query?

提问人:toch 提问时间:10/5/2023 最后编辑:toch 更新时间:10/5/2023 访问量:35

问:

我从一个(旧版)表中设置了以下结果:

enter image description here

我想要首先获取第一个 LABEL 并设置为另一列,如下所示:IF ARTCO = '999999' AND LINETYP ='C'

enter image description here

我试过 ROW_NUMBER() OVER (PARTITION BY ...),但它不起作用。 有什么提示吗?我没有任何想法去做。谢谢

我想通过 ARTCO 获得一些分区,但我的问题是“999999”代码不允许按 ARTCO 分组,然后获取 LINETYP 'C' 的第一个 LABEL

 SELECT
        "NUM",
        "TYPE",
        "LINENB",
        "ARTCO",
        "LABEL",
        "LINETYP",        
        ROW_NUMBER() OVER (PARTITION BY "NUM","TYPE","ARTCO" ) AS RowNum
    FROM my_table t1
  where "NUM" = '015662' 
  order by  "NUM","TYPE","ARTCO"

然后,我得到:

enter image description here

那么问题来了,这是没有办法做到的?

SQL PostgreSQL 分区

评论

0赞 nicomp 10/5/2023
“但它不起作用”——这是什么意思?发布您的代码和结果。
0赞 toch 10/5/2023
问题更新,希望更容易理解。
0赞 Stu 10/5/2023
🚫📸 为什么我应该不上传代码数据数据的图像

答:

0赞 Ale_Bianco 10/5/2023 #1

您可以通过使用带有语句的子查询来获得所需的结果来实现此目的。下面是一个示例,说明如何做到这一点:CASE

UPDATE your_table t1
SET t1.NEXT_LABEL = (
    SELECT TOP 1 t2.LABEL
    FROM your_table t2
    WHERE t2.ARTCO = '999999' AND t2.LINETYP = 'C' AND t2.DATE > t1.DATE
    ORDER BY t2.DATE ASC
)
WHERE t1.ARTCO = '999999' AND t1.LINETYP = 'C';