我尝试这个查询
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,
这显示错误
操作数数据类型varchar对sum运算符无效。
我想要这样的结果
Name No Cultus vigo total_v MA Speed
David 651 9 2 11 1799 345
更新
当我尝试这个
时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 :(得分:1)
RVU.MA列中可能存在字符串值。尝试使用以下查询来找出这种差异。
SELECT *
FROM RVU
WHERE ISNUMERIC (RVU.MA)!=1
答案 1 :(得分:1)
您可以使用以下语法来获得答案。
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
答案 2 :(得分: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]
答案 3 :(得分: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