У меня есть две таблицы
Funddetails
:
FundId Fund Industry State Column1
-----------------------------------------
1 1 2 NSW
2 1 2 ACT
3 1 2 VIC
4 1 2 NSW
5 1 2 ACT
6 1 2 VIC
7 1 2 NSW
8 1 2 ACT
9 1 2 VIC
Industrydetail
:
IndustryId price State
-----------------------
1 12 NSW
2 1 Vic
3 3 ACT
Я хочу написать хранимую процедуру, которая будет обновлять Column1
таблицы funddetails
.
Column1
рассчитывается как
funddetails.Industry * Industrydetail.price - Avg of funddetails.Industry per state
Если значение меньше или равно -5, верните 50, иначе 100
Это моя хранимая процедура:
UPDATE FundDetails
SET Column1 =
CASE
WHEN (funddetails.Industry * Industrydetail.price-Avg(funddetails.Industry) OVER (partition BY t2.state )) <= -5
THEN '50'
ELSE '100'
END
FROM FundDetails t2
INNER JOIN IndustryDetails t1 ON t1.State = t2.State
Я получаю ошибку
Оконные функции могут появляться только в предложениях SELECT или ORDER BY.
Я новичок в SQL Server. Что я делаю не так, или есть лучший подход к тому, что я пытаюсь сделать?
Любая помощь будет оценена. заранее спасибо
2 ответа
Измените ваш код, как показано ниже
UPDATE FundDetails
SET Column1= CASE
WHEN (funddetails.Industry*Industrydetails.price-
(select Avg(funddetails.Industry) OVER (partition BY FundDetails.state))
<= -5 THEN '50' ELSE '100'
END
FROM FundDetails
INNER JOIN Industrydetails on FundDetails.State = Industrydetails.State
Вы можете как ниже:
UPDATE FundDetails
SET Column1 = CASE WHEN (funddetails.Industry * t1.price- t2.MyAvg) <= -5 THEN '50'
ELSE '100' END
FROM
(SELECT fd.*, Avg(fd.Industry) OVER (partition BY fd.state ) MyAvg FROM FundDetails fd) t2 INNER JOIN
IndustryDetails t1 on t1.State = t2.State
--WHERE FundDetails.Id = t2.Id
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.