Sql 计算值在另一列中出现次数的存储过程
多亏了存储过程,我想在test_paternite中计算“cb”列中出现“parent”的次数(图1)。 例如,父级“ASPIELEC 01 1/1”在cb列中出现1次:(图2)Sql 计算值在另一列中出现次数的存储过程,sql,sql-server,stored-procedures,count,sql-update,Sql,Sql Server,Stored Procedures,Count,Sql Update,多亏了存储过程,我想在test_paternite中计算“cb”列中出现“parent”的次数(图1)。 例如,父级“ASPIELEC 01 1/1”在cb列中出现1次:(图2) 从[database].[dbo].[paternite]中选择cb、父项、测试父项,其中cb='ASPIELEC 01 1/1' Aspelec 01 1/1的预期结果: 我试过: USE [database] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON G
从[database].[dbo].[paternite]中选择cb、父项、测试父项,其中cb='ASPIELEC 01 1/1'
Aspelec 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
请对数据使用格式化文本*而不是图像-它们杂乱无章,难以阅读,并且不可能复制和粘贴出来供愿意提供帮助的人使用。还有,定义最佳?您当前的解决方案是否提供了所需的结果?那么,您希望改进什么呢?谢谢您的建议,我还不知道如何正确使用StackOverflow。但是,我对我遇到的其他问题的正确答案投了赞成票asked@jess.r但投票与“给出答案”并不相同。在您开始使用SO 6个月后,“不知道”只是一个不好的借口。谢谢@DaleKThank,结果是预期的(正如我的查询),但我的查询只影响1620行,而您的查询影响表中的所有行,为什么?