2016-10-14 2 views
1

Я написал хранимую процедуру, которая работает нормально. Я хочу рассчитать среднее значение fd.benefitscontributions, которое я могу сделать как AVG(fd.benefitscontributions).Сохраненное значение вставки процедуры, если условие else else

Если результат больше 50, то в столбце состояния таблицы if_funddetails введите «good» else «bad». if_funddetails 4 колонки в настоящее время я вставляя значения в три колонки, но колонки далее, т.е. status значение основано на среднем fd.benefitscontributions

INSERT INTO if_funddetails (d.fundcode, d.fundname, fd.benefitscontributions) 
    SELECT DISTINCT d.fundcode, d.fundname, fd.benefitscontributions 
    FROM dbo.ws_funddetail AS d 
     LEFT OUTER JOIN dbo.v_fundnooutofpocket AS nop 
         ON d.funddetailid = nop.funddetailid 
     INNER JOIN dbo.ws_funddata AS fd 
       ON nop.fundreportid = fd.fundreportid 

я могу получить среднее, но как добавить значение «хорошо» или ' bad 'в столбце состояния не уверен. Любая помощь будет оценена по достоинству.

+0

Использовать регистр событий со средним значением –

ответ

1

Try оператор Case с функцией AVG, как вы получили AVG уже

CASE WHEN AVG(FieldName)>50 THEN 'Good' ELSE 'Bad' END AS 'Status' 

Примечание: Чтобы использовать агрегатную функцию, вы должны Группа других столбцов

0

Попробуйте это .. случай, используемый для знать STAUS

INSERT INTO IF_FUNDDETAILS (D.FUNDCODE, D.FUNDNAME, STATUS) 
    SELECT DISTINCT D.FUNDCODE, D.FUNDNAME, CASE WHEN AVG(FD.BENEFITSCONTRIBUTIONS)>50 THEN 'GOOD' ELSE 'BAD' END AS STATUS 
    FROM DBO.WS_FUNDDETAIL AS D 
    LEFT OUTER JOIN DBO.V_FUNDNOOUTOFPOCKET AS NOP ON D.FUNDDETAILID = NOP.FUNDDETAILID 
    INNER JOIN DBO.WS_FUNDDATA AS FD ON NOP.FUNDREPORTID = FD.FUNDREPORTID 
    GROUP BY D.FUNDCODE, D.FUNDNAME 
0

Используйте

IIF(AVG(FD.BENEFITSCONTRIBUTIONS)>50 ,'Good', 'Bad') AS 'Status' 
+0

'IFF' - это SQL Server 2012+. Теги имеют [тег: sql-server-2008] –

Смежные вопросы