计算一个值在另一列中出现次数的存储过程

Stored procedure to count number of occurrences of a value in another column

感谢 存储过程,我想在 test_paternite 中计算“cb”列中“parent”的出现次数(图 1 ). 例如,父“ASPIELEC 01 1/1”在 cb 列中出现 1 次:(image 2)

SELECT cb, parent, test_paternite FROM [database].[dbo].[Paternite] where cb='ASPIELEC 01 1/1'

ASPIELEC 01 1/1 的预期结果:

我试过了:

USE [database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[INS_MAJ_PATERNITE_V2] 
        @retcode int OUTPUT,
        @message VARCHAR(255) OUTPUT
    AS

BEGIN
    
            ---- how many times parents appears in cb column
    
    WITH nb_parent_dans_cb
    AS
    (
        SELECT count(*) AS nb, cb 
        FROM Paternite
        where parent in (select cb from paternite)
        GROUP BY cb 
    )

    UPDATE Paternite
    SET Test_paternite = nb_parent_dans_cb.nb
    FROM Paternite
    INNER JOIN nb_parent_dans_cb ON paternite.cb = nb_parent_dans_cb.cb

END

这是最好的方法吗?

如果我没听错,你可以将其简化为一个直接相关的子查询:

update p
set test_paternite = (select count(*) from paternite p1 where p1.cb = p.parent)
from paternite p