У меня есть таблица с заданными значениями. Это только примерная таблица, моя настоящая история содержит 15 столбцов и содержит более 1000 строк данных.
CREATE TABLE TEMP_GRACE
(
SYM NVARCHAR(2),
ENG NVARCHAR(2),
MATHS NVARCHAR(2),
SCIENCE NVARCHAR(2),
GEO NVARCHAR(2)
);
insert into temp_grace values ('1','28','5','10','5');
insert into temp_grace values ('2','50','25','30','20');
insert into temp_grace values ('3','15','10','25','20');
insert into temp_grace values ('4','90','95','98','90');
insert into temp_grace values ('5','90','88','25','87');
По каждому предмету проходной балл равен 30. Мне нужно подсчитать, сколько НОМЕР ОБНОВЛЕНИЯ следует добавить к каждому предметному знаку, чтобы получить 30, а затем получить сумму такого НОМЕР ОБНОВЛЕНИЯ [TTL_UPGRADE]
для каждого номера символа.
Я должен добавить требуемый НОМЕР ОБНОВЛЕНИЯ к предметам, если общее НОМЕР ОБНОВЛЕНИЯ составляет менее 60 для каждой строки.
Я сделал запрос SELECT
для этого условия, но я понятия не имею, как я могу add/update
требовать НОМЕР ОБНОВЛЕНИЯ для каждого предмета.
WITH CTE AS
(
SELECT
SYM,
ENG,
CASE WHEN A.ENG <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.ENG) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.ENG)
ELSE 100 END AS [UP_ENG]
,MATHS
,CASE WHEN A.MATHS <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.MATHS) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.MATHS)
ELSE 100 END AS [UP_MATHS]
,SCIENCE
,CASE WHEN A.SCIENCE <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.SCIENCE) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.SCIENCE)
ELSE 100 END AS [UP_SCIENCE]
,GEO
,CASE WHEN A.GEO <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.GEO) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.GEO)
ELSE 100 END AS [UP_GEO]
,(
(CASE WHEN A.ENG <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.ENG) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.ENG)
ELSE 0 END) +
(CASE WHEN A.MATHS <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.MATHS) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.MATHS)
ELSE 0 END) +
(CASE WHEN A.SCIENCE <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.SCIENCE) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.SCIENCE)
ELSE 0 END) +
(CASE WHEN A.GEO <> 'AB' AND TRY_CONVERT(NUMERIC(38, 2), A.GEO) < 30.00
THEN 30.00 - TRY_CONVERT(NUMERIC(38, 2), A.GEO)
ELSE 0 END)
) AS [TTL_UPGRADE]
FROM [DBO].[TEMP_GRACE] A
)
SELECT SYM, ENG, UP_ENG, MATHS, UP_MATHS, SCIENCE, UP_SCIENCE, GEO, UP_GEO, TTL_UPGRADE FROM CTE
WHERE TTL_UPGRADE < 60 AND TTL_UPGRADE > 0 ORDER BY TTL_UPGRADE DESC;
Основываясь на запросе фильтра выше, я должен добавить UPGRADE NUMBER к 3 из sym
строк. Теперь, как обновить такие строки?
SYM ENG UP_ENG MATHS UP_MATHS SCIENCE UP_SCIENCE GEO UP_GEO TTL_UPGRADE
3 15 15.00 10 20.00 25 5.00 20 10.00 50.00
2 50 100.00 25 5.00 30 100.00 20 10.00 15.00
5 90 100.00 88 100.00 25 5.00 87 100.00 5.00
В первом ряду я должен добавить 15 в ENG, 20 в MATHS, 5 в НАУКЕ и 10 в GEO, аналогично для второго ряда я должен добавить 5 в MATHS, 10 в GEO и для третьего ряда я должен добавить 5 в НАУКЕ.