2016-09-16 4 views
1

Я стараюсь, этот запросОперанд тип данных VARCHAR недопустим для оператора суммы

Select 
S.Name,S.No, 
SUM(Case when s.Model='Cultus' then total else 0 end) as Cultus, 
SUM(Case when s.Model ='vigo' then total else 0 end) as vigo, 
SUM(total) total_v , 
s.MA,MAX(S.Speed) Speed 
from (
Select 
RVU.Name,RVU.No,VV.Model,count(VV.Model) as total, RVU.MA as MA,RVU.Speed 
from 
VV 
inner join RVU 
on VV.MID=RVU.ID 
inner join RU on RVU.RID= RU.RID 
    WHERE 
RU.StartDate>= '2016-04-01 00:00:00' and 
RU.EndDate<='2016-04-30 23:59:59' and 
RU.Region= 'Paris' 
and RVU.No= '651' AND Model <> '' 
Group By RVU.Name,RVU.RegNo,VV.Model,RVU.MA,RVU.Speed) S 
GROUP BY 
s.RegNo,s.Name,S.MA 

Ouput

Name No Cultus vigo total_v MA  Speed 
David 651 2 0  2   1048  124 
David 651 3 0  3   597  345 
David 651 1 0  1   606  101 
David 651 3 2  5   992  110 

когда я попробовать этот

Sum(MA) MA, 

ЭТА ВЫСТАВКА ERROR

О perand тип данных varchar недействителен для оператора сумм.

Я хочу привести как этот

Name No  Cultus vigo total_v MA Speed 
David 651 9   2  11  1799 345 

UPDATE

когда я попробовать этот

SUM(CASE ISNULL(MA,'') WHEN '' THEN 0 ELSE CAST(MA AS INT) END), 

, а также этот

sum(cast (MA as int)) 

затем выход

Name No Cultus vigo total_v  MA  Speed 
David 651 2 0  2   4192  124 
David 651 3 0  3   2388  345 
David 651 1 0  1   2424  101 
David 651 3 2  5   4960  110 

обновлена ​​2:

, когда я исполняю только эта часть этого шоу несколько записей с одинаковыми данными

Select 
    RVU.Name,RVU.No,VV.Model,count(VV.Model) as total, RVU.MA as MA,RVU.Speed 
    from 
    VV 
    inner join RVU 
    on VV.MID=RVU.ID 
    inner join RU on RVU.RID= RU.RID 
     WHERE 
    RU.StartDate>= '2016-04-01 00:00:00' and 
    RU.EndDate<='2016-04-30 23:59:59' and 
    RU.Region= 'Paris' 
    and RVU.No= '651' AND Model <> '' 
    Group By RVU.Name,RVU.RegNo,VV.Model,RVU.MA,RVU.Speed 

выглядит как значение полностью изменить

+0

Ваш столбец MA является типом данных VARCHAR? –

+0

@JimMacaulay yes – user6628729

+0

В этом случае вы не можете агрегировать столбец, агрегирование выполняется только для целых столбцов. Я расскажу вам, как заполнить колонку строк –

ответ

0

Кажется, что одно из ваших значений столбца MA - тип varchar, проверьте свои данные

Если ваш тип VARCHAR данные затем приведение к INT:

SUM(CASE ISNULL(MA,'') WHEN '' THEN 0 ELSE CAST(MA AS INT) END) 

DECLARE @tblTest as Table(
    Name VARCHAR(10), 
    No INT, 
    Cultus INT, 
    vigo INT, 
    total_v INt, 
    MA VARCHAR(5), 
    Speed INT 
) 

INSERT INTO @tblTest VALUES 
('David',651,2,0,2,1048,124) 
,('David',651,3,0,3,597,345) 
,('David',651,1,0,1,606,101) 
,('David',651,3,2,5,992,110) 

SELECT 
    Name,[No],SUM(Cultus), 
    SUM(vigo) AS vigo ,SUM(total_v) AS total_v, 
    SUM(CASE ISNULL(MA,'') WHEN '' THEN 0 ELSE CAST(MA AS INT) END) AS MA, 
    MAX(Speed) AS Speed 
FROM @tblTest 
GROUP BY Name,[No] 
+0

нет значения varchar i checked – user6628729

+0

Что такое тип данных вашей колонки? он не должен быть типом string/varchar/nvarchar –

+0

datatype is varchar – user6628729

0
create table #t 
(
id varchar(20)) 



insert into #t 
select '2' 
union all 
select '3' 

select sum(id) from #t--this fails 

Вам нужно сделать

select sum(cast (id as int))--cast from 2008 onwards 
from #t 

В вашем случае колонке MA имеет тип Varchar

+0

, когда я пытаюсь изменить ваши значения MA. например 103 измените на какое-то другое значение smae для других – user6628729

+0

Я не понимаю, что вы говорите, пожалуйста, обновите вопрос – TheGameiswar

+0

check update question – user6628729

0

В столбце RVU.MA может быть вероятность строкового значения. Попробуйте выполнить приведенный ниже запрос, чтобы узнать о таких расхождениях.

SELECT * 
    FROM RVU 
    WHERE ISNUMERIC (RVU.MA)!=1 
0


Uou может использовать синтаксис ниже, чтобы получить ответ.

select sum(cast(columnname as int)) from TableName 

Попробуйте применить этот синтаксис,

select sum(cast(s.MA as int)) from (
Select 
RVU.Name,RVU.No,VV.Model,count(VV.Model) as total, RVU.MA as MA,RVU.Speed 
from 
VV 
inner join RVU 
on VV.MID=RVU.ID 
inner join RU on RVU.RID= RU.RID 
WHERE 
RU.StartDate>= '2016-04-01 00:00:00' and 
RU.EndDate<='2016-04-30 23:59:59' and 
RU.Region= 'Paris' 
and RVU.No= '651' AND Model <> '' 
Group By RVU.Name,RVU.RegNo,VV.Model,RVU.MA,RVU.Speed) S 

Проверить этот запрос, были ли вы в состоянии выбрать запись и применить эту логику в запросе.

Ваш последний запрос выглядит,

Select 
S.Name,S.No, 
SUM(Case when s.Model='Cultus' then total else 0 end) as Cultus, 
SUM(Case when s.Model ='vigo' then total else 0 end) as vigo, 
SUM(total) total_v , 
sum(cast(s.MA as int)),MAX(S.Speed) Speed 
from (
Select 
RVU.Name,RVU.No,VV.Model,count(VV.Model) as total, RVU.MA as MA,RVU.Speed 
from 
VV 
inner join RVU 
on VV.MID=RVU.ID 
inner join RU on RVU.RID= RU.RID 
WHERE 
RU.StartDate>= '2016-04-01 00:00:00' and 
RU.EndDate<='2016-04-30 23:59:59' and 
RU.Region= 'Paris' 
and RVU.No= '651' AND Model <> '' 
Group By RVU.Name,RVU.RegNo,VV.Model,RVU.MA,RVU.Speed) S 
GROUP BY 
s.RegNo,s.Name,S.MA 
+0

это показывает неправильный результат – user6628729

+0

проверка обновлен2 вопрос – user6628729

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