День добрый, подскажите начинающему
Есть таблица, н/р:
д1 д2 д3....(тип варчар)
3 2
б 3
5 3
мне нужно добыть сумму каждого столбца
если просто бы были цифры — то тогда все ОК
пишу
...
SELECT
SUM(CAST(Round(D1,2)As decimal(5,2))) As D1
FROM
...
но там есть и буквы, которые эквивалентны сумме=8
тогда пишу
...
SELECT
SumD2 =
CASE D1
WHEN 'б' then 8
ELSE
SUM(CAST(Round(D2,2)As decimal(5,2)))
END
FROM
...
и вот тебе подарок Column dbo.Zadanie.D2 is invalid in the select list because it is not contained in either an aggregate function or ORDER BY clause
подскажите что я делаю не так??
Здравствуйте, 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
Большое спасибо за подсказку!!! )
все получилось так
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>