2016-08-15 17 views
2

このクエリを試して、VNameの合計を取得します。私は今、私はVNAMEを省略したいとMAとMSpeedSQLクエリの合計

のすべてVNAMEとMAXの合計値をしたい、この

ID  OName RegNo VName total MA MSpeed 
26626 john BE  MV  3  754 130 
26765 john BE  MV  3  90 140 
24569 john BE  DDSB  6  4 19 
27569 john BE  MV  2  62 129 
21231 john BE  MV  3  66 136 

のように、このショーの結果クエリの上にしようとすると、テーブルに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 

です

すなわち

ID  OName RegNo  total MA MSpeed 
26626 john BE   17 754 136 

私はこのクエリで@Theシュータークエリクエリを試すために、私は唯一の追加トップ(1)私はこのショーを追加するときに私が欲しいwheras 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 

ので、クエリ上記のショーの結果、この

ID  OName RegNo VName total MA MSpeed 
26626 john BE  MV  3  754 130 

のような総たい3の合計に対し、合計17ない3

+2

あなたはどのようにSUM名を使用できますか?あなたはCOUNTを意味しますか? – Matt

+0

ここでSELECT DISTINCTは必要ありません。GROUP BYは重複を返しません。 – jarlh

+0

値が(3,3,4)の列の名前は何ですか? – Serg

答えて

1

は、この(私はちょうどあなたのクエリを変更)してくださいすることでした:

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 
+0

この表示エラーを使用しません。 TOP、OFFSETまたはFOR XMLがない限り、ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル式でORDER BY句は無効です。指定されています。 @ The Shooter – user6628729

+0

とアップデートの質問@ The Shooter – user6628729

+0

@ user6628729内のクエリとIDからORDER BY句を削除し、group byとselectリストから削除しても問題ありません。 –

1

あなたがおそらくSUM()ではなくCOUNT()またはCOUNT(DISTINCT)を使用してください。あなたは既にGROUP BYを持っているので、SELECT DISTINCTを使用しないでください:

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 
+0

いいえ私はカウントを使用しません..実際には毎月のデータでVNameは1回のユーザーに対して3回発生します。'1ジョン3 1ジョン3 1ジョン4そう私は1ジョン10を望む – user6628729

+0

あなたは' COUNT(DISTINCT) 'がほしいと思う。サンプルデータはコメントではなく質問に表示されるので、質問を編集する必要があります。 –

+0

これは複数のデータを示しています – user6628729

0

私はまたGROUP BYDISTINCTを使用していない、あなたがいないSUMCOUNTをしたいと思います。

サイドノート:tblRegion_UniFROMの部分にはありませんか? サイドノート2:AND tblvv.VName <> ''AND tblvv.VName IS NOT NULL

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 
+0

この表示エラーは、 – user6628729

0

選択IDを、ONAME、レグノは、合計、マックス(MAとして(VNAME)を数えます)、MAmaxとしてMax(MSpeed) from table_name グループby OName;