2017-05-30 14 views
0

こんにちは私は2つのテーブルを持っています。Sum()内の計算が正しくありません

Table 1 --> StudentId = 1 ,Score = 10 , 20 ,30 , StudentId = 2 ,Score = 5, 5 
Table 2 --> StudentId = 1 ,Score = 5, 10 ,15 , StudentId = 2 ,Score = 15, 25 
Total = StudentId = 1 ---> 90 , StudentId = 2 ---> 45 

私はこのクエリを使用します。

Select Sum(tbl_EvaPoint.Score + tbl_ActPoint.Score), 
     tbl_ActPoint.StudentId 
From tbl_EvaPoint 
JOIN tbl_ActPoint 
    ON tbl_EvaPoint.StudentId = tbl_ActPoint.StudentId 
GROUP BY tbl_ActPoint.StudentId` 

何もかもは大丈夫ですが、私は180と90または他のsomthingsを取得する代わりに、90と45の間違った合計を取得します。

+3

データを表示するためにテーブル形式を使用できますか。 [** THIS **](https://senseful.github.io/web-tools/text-table/)のように、またはdbスキーマとは何か、その構造体が何であるかはわかりません。しかし、推測すると 'JOIN'ではなく' UNION'が必要です –

+0

入力テーブル構造と期待される出力を提供できますか? –

+0

質問タイトルに "解決済み"を入れないでください。 **あなたの問題を解決した答えを受け入れる**。 –

答えて

2

利用UNION代わりのJOIN

SELECT student_id, SUM(score) 
FROM (SELECT student_id, score FROM Table1 
     UNION ALL 
     SELECT student_id, score FROM Table2 
    ) as T 
GROUP BY student_id 
+0

tnxまさに私が欲しいものです。私の問題は解決しました。 –

+0

答えを受け入れることを忘れないでください。緑の目盛り –

0

私は、CTEがより読みやすいと思いますが、それは個人的な好みです。

CREATE TABLE #S1 (
    StudentID smallint 
    ,Score smallint) 

INSERT INTO #S1 
SELECT 1, 10; 
INSERT INTO #S1 
SELECT 1, 20; 
INSERT INTO #S1 
SELECT 1, 30; 
INSERT INTO #S1 
SELECT 2, 5 
INSERT INTO #S1 
SELECT 2, 5; 

CREATE TABLE #S2 (
    StudentID smallint 
    ,Score smallint) 

INSERT INTO #S2 
SELECT 1, 5; 
INSERT INTO #S2 
SELECT 1, 10; 
INSERT INTO #S2 
SELECT 1, 15; 
INSERT INTO #S2 
SELECT 2, 15; 
INSERT INTO #S2 
SELECT 2, 25; 

WITH CTE AS (
SELECT 
    StudentID, Score 
FROM #S1 
UNION ALL 
SELECT 
    StudentID, Score 
FROM #S2) 

SELECT 
    StudentID 
    ,SUM(Score) AS TotalScore 
FROM CTE 
GROUP BY StudentID 
関連する問題