SQL查询中的求和
我尝试此查询以获取VName sum。在表VName中,数据类型为varcharSQL查询中的求和,sql,sql-server,sum,Sql,Sql Server,Sum,我尝试此查询以获取VName sum。在表VName中,数据类型为varchar Select distinct tblRV.ID as ID, tblRV.OName, tblRV.RegNo, tblvv.VName, count( tblvv.VName) as total, tblRV.MA, tblRV.MSpeed from tblRe inner join tblRV On tblReG.RID = tblRV.RID inner join tblvv on tblRV.I
Select distinct tblRV.ID as ID,
tblRV.OName,
tblRV.RegNo,
tblvv.VName,
count( tblvv.VName) as total,
tblRV.MA,
tblRV.MSpeed
from tblRe
inner join tblRV
On tblReG.RID = tblRV.RID
inner join tblvv
on tblRV.ID=tblVV.MID
WHERE
tblRe.StartDate >= '2016-07-01 00:00:00.000' AND
tblRe.EndDate <= '2016-07-31 23:59:59.000' and
tblRe.Region = ‘UK’ and
VName <> ''
group by
tblRV.ID ,
tblRV.OName,
tblRV .RegNo,
tblRV.MA,
tblRV.MSpeed,
tblRV.VName
order by
tblRV.OName,
tblRV.ID
现在我想省略VName,并希望得到所有VName的总和以及MA和MSpeed的最大值
i、 e
因为我在这个查询中尝试@Shooter查询,所以我只添加top1,所以当我添加这个show total 3时,我想要total 17
SELECT
S.ID
,S.OName
,S.RegNo
,SUM(Total) vNameSum
,MAX(S.MA) MaxMA
,MAX(S.MSpeed) MaxMSpeed
FROM
(
SELECT top (1)
tblRV.ID as ID,
tblRV.OName,
tblRV.RegNo,
tblvv.VName,
COUNT(tblvv.VName) as total,
tblRV.MA,
tblRV.MSpeed
FROM tblRe
INNER JOIN tblRV
ON tblReG.RID = tblRV.RID
INNER JOIN tblvv
ON tblRV.ID=tblVV.MID
WHERE
tblRe.StartDate >= '2016-07-01 00:00:00.000'
AND tblRe.EndDate <= '2016-07-31 23:59:59.000'
AND tblRe.Region = ‘UK’
AND VName <> ''
GROUP BY
tblRV.ID
,tblRV.OName
,tblRV.RegNo
,tblRV.MA
,tblRV.MSpeed
,tblRV.VName
ORDER BY
tblRV.OName
,tblRV.ID
) S
GROUP BY
S.ID
,S.OName
,S.RegNo
当我想要总数17而不是3时,你可能想要计数或计数不同,而不是求和。您已经有分组依据,因此不要使用“选择不同”:
我想你要数不和,也不要用和组不同的方式
旁注:tblRegion_Uni不在FROM部分中?
旁注2:可能和tblvv.VName为空,而tblvv.VName不为空
尝试此操作我刚刚修改了您的查询:
SELECT
S.OName
,S.RegNo
,SUM(Total) vNameSum
,MAX(S.MA) MaxMA
,MAX(S.MSpeed) MaxMSpeed
FROM
(
SELECT
tblRV.OName,
tblRV.RegNo,
tblvv.VName,
COUNT(tblvv.VName) as total,
tblRV.MA,
tblRV.MSpeed
FROM tblRe
INNER JOIN tblRV
ON tblReG.RID = tblRV.RID
INNER JOIN tblvv
ON tblRV.ID=tblVV.MID
WHERE
tblRe.StartDate >= '2016-07-01 00:00:00.000'
AND tblRe.EndDate <= '2016-07-31 23:59:59.000'
AND tblRe.Region = ‘UK’
AND VName <> ''
GROUP BY
tblRV.OName
,tblRV.RegNo
,tblRV.MA
,tblRV.MSpeed
,tblRV.VName
) S
GROUP BY
S.OName
,S.RegNo
ORDER BY
tblRV.OName
选择ID、OName、RegNo、countvname作为总计、MaxMA作为MA、MaxMSpeed作为Mspeed 从表\u名称
按OName分组 你怎么计算名字的总数?你的意思是计数吗?这里不需要选择DISTINCT,GROUP BY不返回重复项。值为3,3,4的列的名称是什么?VName@Serg 3,3,4是因为我使用计数,现在显示的是hwy 3,3,4。我想使用sum,所以我想得到值10。你的意思是VName值真的是“3”,“3”,“4”?不,我不使用计数。。实际上,在每月数据中,VName为1个用户出现了3次,所以我想求和,即1约翰3约翰3约翰4,所以我想1约翰10,我想你想要计数。样本数据应该放在问题中,而不是注释中,所以你应该编辑你的问题。我使用计数,显示hwy 3,3,4现在我要使用总和,所以我要得到值10@user6628729 . . . 您可能需要从SELECT和GROUP BY中删除列。如果没有更清晰的问题样本数据、期望的结果,就很难更具体。我不想使用countthis show error。。ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML@这个Shooter@user6628729从内部查询中删除ORDER BY子句,并从group BY中删除ID,然后选择list,它应该可以正常工作。是否意味着我将ORDER BY放在末尾?@射手这里有一个问题我必须放上ID,因为查询数据显示在表中,并且该表中有记录,因此根据ID,我做了一些其他工作。。当我删除id时,代码上会显示错误。您的输出显示您希望对john的vName总数进行汇总,然后对其他人进行汇总。在这种情况下,您不能将id放入选择列表中,因为您是按名称分组的,而将id放入组将导致您已经看到的结果。
SELECT
S.ID
,S.OName
,S.RegNo
,SUM(Total) vNameSum
,MAX(S.MA) MaxMA
,MAX(S.MSpeed) MaxMSpeed
FROM
(
SELECT top (1)
tblRV.ID as ID,
tblRV.OName,
tblRV.RegNo,
tblvv.VName,
COUNT(tblvv.VName) as total,
tblRV.MA,
tblRV.MSpeed
FROM tblRe
INNER JOIN tblRV
ON tblReG.RID = tblRV.RID
INNER JOIN tblvv
ON tblRV.ID=tblVV.MID
WHERE
tblRe.StartDate >= '2016-07-01 00:00:00.000'
AND tblRe.EndDate <= '2016-07-31 23:59:59.000'
AND tblRe.Region = ‘UK’
AND VName <> ''
GROUP BY
tblRV.ID
,tblRV.OName
,tblRV.RegNo
,tblRV.MA
,tblRV.MSpeed
,tblRV.VName
ORDER BY
tblRV.OName
,tblRV.ID
) S
GROUP BY
S.ID
,S.OName
,S.RegNo
ID OName RegNo VName total MA MSpeed
26626 john BE MV 3 754 130
Select tblRV.ID, tblRV.oName, tblRV.RegNo,
count(distinct tblvv.VName) as total, -- number of different names
max(tblRV.Speed),
-------^ Your comment suggests that this should be `SUM()`
tblRV.MA
from tblRe inner join
tblRV
On tblRe.RID = tblRV.RID inner join
tblvv
on tblRV.ID = tblVV.MID
where tblRegion_Uni.StartDate >= '2016-07-01' AND
tblRegion_Uni.EndDate < '2016-07-29' and
tblRegion_Uni.Region = 'uk' and
VName <> ''
group by tblRV.ID, tblRV.OName, tblRV.RegNo, tblRV.MA
order by tblRV.OName, tblRV.ID
SELECT
tblRV.ID AS ID,
tblRV.oName,
tblRV.RegNo,
COUNT(tblvv.VName) AS total,
MAX(tblRV.Speed),
tblRV.MA
FROM tblRe
INNER JOIN tblRV ON tblRe.RID = tblRV.RID
INNER JOIN tblvv ON tblRV.ID = tblVV.MID
WHERE tblRegion_Uni.StartDate >= '2016-07-01 00:00:00.000'
AND tblRegion_Uni.EndDate <= '2016-07-28 23:59:59.000'
AND tblRegion_Uni.Region = 'uk'
AND tblvv.VName <> ''
GROUP BY tblRV.ID, tblRV.OName, tblRV.RegNo, tblRV.MA
ORDER BY tblRV.OName, tblRV.ID
SELECT
S.OName
,S.RegNo
,SUM(Total) vNameSum
,MAX(S.MA) MaxMA
,MAX(S.MSpeed) MaxMSpeed
FROM
(
SELECT
tblRV.OName,
tblRV.RegNo,
tblvv.VName,
COUNT(tblvv.VName) as total,
tblRV.MA,
tblRV.MSpeed
FROM tblRe
INNER JOIN tblRV
ON tblReG.RID = tblRV.RID
INNER JOIN tblvv
ON tblRV.ID=tblVV.MID
WHERE
tblRe.StartDate >= '2016-07-01 00:00:00.000'
AND tblRe.EndDate <= '2016-07-31 23:59:59.000'
AND tblRe.Region = ‘UK’
AND VName <> ''
GROUP BY
tblRV.OName
,tblRV.RegNo
,tblRV.MA
,tblRV.MSpeed
,tblRV.VName
) S
GROUP BY
S.OName
,S.RegNo
ORDER BY
tblRV.OName