Re[2]: CASE в StoredProcedure
От: qqq0ppp  
Дата: 10.06.10 13:59
Оценка:
Большое спасибо за подсказку!!! )
все получилось так

SELECT
SUM(CASE D1
WHEN 'б' THEN 8
WHEN 'о' THEN 8
WHEN 'от' THEN 8
WHEN 'к' THEN 8
ELSE CAST(ROUND(D1,2) AS DECIMAL(5,2))
END) as SumD1
FROM dbo.PrZad
WHERE (StaffID = @StaffId) AND (MONTH(PlanDataOtch) = MONTH({ fn NOW() })) AND (YEAR(PlanDataOtch) = YEAR({ fn NOW() }))






Здравствуйте, Warturtle, Вы писали:

W>Здравствуйте, qqq0ppp, Вы писали:


Q>>День добрый, подскажите начинающему


Q>>Есть таблица, н/р:

Q>>д1 д2 д3....(тип варчар)
Q>>3 2
Q>> б 3
Q>>5 3

Q>>мне нужно добыть сумму каждого столбца


Q>>если просто бы были цифры — то тогда все ОК

Q>>пишу
Q>>...
Q>>SELECT
Q>>SUM(CAST(Round(D1,2)As decimal(5,2))) As D1
Q>>FROM
Q>>...

Q>>но там есть и буквы, которые эквивалентны сумме=8

Q>>тогда пишу
Q>>...
Q>>SELECT
Q>>SumD2 =
Q>>CASE D1
Q>> WHEN 'б' then 8
Q>> ELSE
Q>> SUM(CAST(Round(D2,2)As decimal(5,2)))
Q>>END
Q>>FROM
Q>>...
Q>>и вот тебе подарок Column dbo.Zadanie.D2 is invalid in the select list because it is not contained in either an aggregate function or ORDER BY clause

Q>>подскажите что я делаю не так??

W>Надо sum вытащить наружу,
W>
W>-- так:
W>SELECT
W>    SUM(D2) AS SumD2
W>FROM 
W>    (
W>        SELECT
W>            D2 = CASE D1
W>                WHEN 'б' THEN 8
W>                ELSE CAST(ROUND(D2,2) AS DECIMAL(5,2))
W>            END
W>        FROM 
W>            X
W>    ) R
W>-- или так,
W>WITH R AS (
W>    SELECT
W>        D2 = CASE D1
W>            WHEN 'б' THEN 8
W>            ELSE CAST(ROUND(D2,2) AS DECIMAL(5,2))
W>        END
W>    FROM 
W>        X
W>)    
W>SELECT
W>    SUM(D2) AS SumD2
W>FROM 
W>    R

W>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.