Sql 获取相关对象的序列号
我完全不知道如何写标题,所以很抱歉,这个主题不是很有描述性 我有两张表,Sql 获取相关对象的序列号,sql,postgresql,Sql,Postgresql,我完全不知道如何写标题,所以很抱歉,这个主题不是很有描述性 我有两张表,A和BB.foo是指向a.id的FK。表B还有一个id列 有没有一种方法可以获得如下结果: |a_id|b_id|b_foo_number |1 |1 |1 |1 |2 |2 |1 |56 |3 |2 |3 |1 |2 |12 |2 |2 |57 |3 从表B中,如下所示: |id|foo |1 |1 |2 |1 |56|1 |3 |2 |12|2 |57|2 现在我完全不知道该
A
和B
B.foo
是指向a.id
的FK。表B
还有一个id
列
有没有一种方法可以获得如下结果:
|a_id|b_id|b_foo_number
|1 |1 |1
|1 |2 |2
|1 |56 |3
|2 |3 |1
|2 |12 |2
|2 |57 |3
从表B
中,如下所示:
|id|foo
|1 |1
|2 |1
|56|1
|3 |2
|12|2
|57|2
现在我完全不知道该怎么做。使用
行号
:
SELECT foo AS a_id, id AS b_id,
ROW_NUMBER() OVER (ORDER BY id) AS b_foo_number
FROM B
WHERE foo = 1
如果要获得每个foo
切片的序列号,请使用partitionby
:
SELECT foo AS a_id, id AS b_id,
ROW_NUMBER() OVER (PARTITION BY foo ORDER BY id) AS b_foo_number
FROM B
ORDER BY foo
使用
行号
:
SELECT foo AS a_id, id AS b_id,
ROW_NUMBER() OVER (ORDER BY id) AS b_foo_number
FROM B
WHERE foo = 1
如果要获得每个foo
切片的序列号,请使用partitionby
:
SELECT foo AS a_id, id AS b_id,
ROW_NUMBER() OVER (PARTITION BY foo ORDER BY id) AS b_foo_number
FROM B
ORDER BY foo
以下操作将生成您指定的输出:
select 1 as a_id, b_id,
row_number() over (partition by foo order by a_id) as b_foo_number
from b;
然而,还不清楚这是否是你真正需要的。您需要更好地指定您的问题。以下内容将生成您指定的输出:
select 1 as a_id, b_id,
row_number() over (partition by foo order by a_id) as b_foo_number
from b;
然而,还不清楚这是否是你真正需要的。您需要更好地指定您的问题。表A与该问题有什么关系?您可能需要一个
行(按id排序)
…@GordonLinoff我更新了一个示例-如果表A中有多个值,我希望每个“切片”的计数器从1到N(按foo)表B中的表A与这个问题有什么关系?您可能需要(按id排序)上的行号()
…@GordonLinoff我更新了一个示例-如果表A中有多个值,我希望每个“切片”的计数器从1到N(按foo)表Bi的行编号按b\u id
排序,行编号按b\u id