计算一个值在另一列中出现次数的存储过程
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
感谢 存储过程,我想在 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