SQL查询中的求和

SQL查询中的求和,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

我尝试此查询以获取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.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