2016-09-16 89 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 

输出继电器

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

Ø对于sum运算符,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), 

而且这个

​​

然后输出

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是 – 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值 – user6628729

+0

什么是您的列的数据类型?它不能是字符串类型/ varchar/nvarchar –

+0

数据类型是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更改为其他值为别人打开 – user6628729

+0

我不明白你的意思,请更新问题 – TheGameiswar

+0

检查更新问题 – user6628729

0

列RVU.MA中可能有字符串值。试着用下面的查询来找出这样的错误。

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


你可以使用下面的语法来得到你的答案。

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

检查updated2问题 – user6628729