是否有办法在父查询中添加一个字段,该字段将随着查询通过子查询中生成的所有值而增加?



我认为我有一个表缺乏真正的主键,我需要在输出中创建一个。我不能修改这个表。

我需要运行一个选择查询来生成一个值列表(list_A),然后获取这些值并查询它们以显示与它们相关的所有记录。从这些记录中,我执行另一次选择以提取一个现在可见的名为list_B的列表。从list_B中,我可以搜索它们以显示与原始列表(list_A)相关的所有记录,其中许多记录缺少list_A中的值,但仍然需要计数。

到目前为止,我的过程如下:

  1. 我声明了一个名为'temp_key'的序列,它从1开始,以1递增。
  2. 我在父查询中添加了一个名为'temp_key'的字段,这样它就有希望显示出结果记录与原始list_A子查询的哪个元素相关。
  3. 我遇到麻烦了因为我不知道如何使temp_key增加作为list_A子查询从列表中所有值的开始到结束。
SELECT currval(temp_key) AS temp_key, list_A, list_B 
FROM table 
WHERE list_B IN (SELECT DISTINCT list_B 
FROM table 
WHERE list_A IN (SELECT DISTINCT list_A 
from table);

现在,上面的查询不起作用,因为似乎没有办法使temp_key的当前值向上递增,因为它遍历最初由最低级别子查询(list_A)生成的列表中的值。

例如,list_A中可能只有10个值。输出可能有100条记录,全部标记为1到10,其中许多值在list_A字段中缺少值。但是它们仍然需要标记为1到10,因为list_B的值连接了这两个集合。

也许您可以先用下面的代码创建一个新的主键列(将行号与list_a连接):

WITH T AS (
SELECT currval(temp_key) AS temp_key, list_A, list_B, 
CONCAT(ROW_NUMBER() OVER(PARTITION BY list_A ORDER BY list_B),list_A) AS Prim_Key  
FROM table )
SELECT * fROM T

然后你可以在where子句中指定你想选择的键

最新更新