#sql #sql-server #stored-procedures #count #sql-update
#sql #sql-сервер #хранимые процедуры #подсчет #sql-обновление
Вопрос:
Я хотел бы, благодаря хранимой процедуре, подсчитать в test_paternite количество вхождений «родительского» в столбец «cb» (изображение 1). Например, родительский «ASPIELEC 01 1/1» появляется 1 раз в столбце cb: (изображение 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
Это лучший способ?
Комментарии:
1. Пожалуйста, пожалуйста, пожалуйста, используйте форматированный текст для данных *, а не изображения — они грязные, их трудно читать, и их невозможно скопировать и вставить для людей, желающих помочь. Кроме того, определите best? Обеспечивает ли ваше текущее решение требуемые результаты? Так что вы надеетесь улучшить?
2. Спасибо за ваши советы, я пока не знаю, как правильно использовать stackoverflow
3. Тем не менее, я проголосовал за правильные ответы на другие вопросы, которые я задал
4. @jess.r Но голосование — это не то же самое, что «отметить ответ». И через 6 месяцев после того, как вы начали использовать SO, «незнание» — это просто плохое оправдание.
Ответ №1:
Если я правильно вас понял, вы могли бы упростить это как прямой коррелированный подзапрос:
update p
set test_paternite = (select count(*) from paternite p1 where p1.cb = p.parent)
from paternite p
Комментарии:
1. Спасибо, результаты соответствуют ожидаемым (как и в моем запросе), но мой запрос затрагивает только 1620 строк, в то время как ваш затрагивает все строки таблицы, почему?