Re: CASE в StoredProcedure
От: Warturtle  
Дата: 10.06.10 12:03
Оценка: 1 (1)
Здравствуйте, 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>подскажите что я делаю не так??

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