2016-10-19 9 views
0

私はこのクエリMySQLのクエリ和と減算和tabels

ベースする必要があります

Id name 
1 ex1 
2 ex2 
3 ex3 

表A

ExtId p 
1  10 
1  20 
2  40 
3  10 
3  10 

表B

ExtId p 
1  10 
1  5 
3  5 
3  5 

TできるC

ExtId p 
1  10 
2  10 
2  20 
3  40 

出力:

表のAp +表 - BP表のCp:

id p 
1 35 
2 10 
3 -10 
+0

あなたは、彼らがテーブルAまたはBにアレント – Nebi

+0

相撲IDまたはC –

+0

AND(表A +表Bを)何をしようとしなかった - 表Cと、すべてのIDがテーブルベース –

答えて

1
select B1.id, coalesce(Q1.p,0) + coalesce(Q2.p,0) - coalesce(Q3.p,0) as p 
from Base B1 
left join 
    (
    select ExtId, sum(p) as p 
    from TableA 
    group by ExtID 
    ) Q1 
    on B1.id = Q1.ExtID 
left join 
    (
    select ExtId, sum(p) as p 
    from TableB 
    group by ExtID 
    ) Q2 
    on B1.id = Q2.ExtID 
left join 
    (
    select ExtId, sum(p) as p 
    from TableC 
    group by ExtID 
    ) Q3 
    on B1.id = Q3.ExtID 
+0

名前が 'exam'のような –

+0

の名前を検索する場合 –

+0

こんにちは、このお礼を書くのを助けてください –

1

あなたのid値の合計をグループ化してみて、それらを計算します。

SELECT 
     A.id 
    , A.P + B.p - C.p 
FROM 
    [Table Base] AS T 
     INNER JOIN 
    (
    SELECT 
      ExtId 
     , SUM(p) AS [p] 
    FROM 
     [Table A] AS A 
    GROUP BY 
     ExtId 
    ) AS A 
     ON T.id = A.ExtId 
     INNER JOIN 
    (
    SELECT 
      ExtId 
     , SUM(p) AS [p] 
    FROM 
     [Table B] AS B 
    GROUP BY 
     ExtId 
    ) AS B 
     ON T.id = B.ExtId 
     INNER JOIN 
    (
    SELECT 
      ExtId 
     , SUM(p) AS [p] 
    FROM 
     [Table C] AS C 
    GROUP BY 
     ExtId 
    ) AS C 
     ON T.id = C.ExtId 
+0

sume id彼らはテーブルにいません。テーブルベースのすべてのID –

+0

@unsign、ありがとう、私はそれを編集しました。 –

0

私の解決策は以下の通りです: -

CREATE TABLE Base (Id INT, name NVARCHAR(10)) 
INSERT INTO Base VALUES (1, 'ex1'), (2, 'ex2'), (3, 'ex3') 

CREATE TABLE TableA (ExtId INT, p INT) 
CREATE TABLE TableB (ExtId INT, p INT) 
CREATE TABLE TableC (ExtId INT, p INT) 

INSERT INTO TableA VALUES (1, 10), (1, 20), (2, 40), (3, 10), (3, 10) 
INSERT INTO TableB VALUES (1, 10), (1, 5), (3, 5), (3, 5) 
INSERT INTO TableC VALUES (1, 10), (2, 10), (2, 20), (3, 40) 

SELECT BS.Id, BS.name, ISNULL(A.A_total, 0) + ISNULL(B.B_total, 0) - ISNULL(C.C_total, 0) 
FROM Base BS 
LEFT JOIN (SELECT ExtId, SUM(p) AS A_total FROM TableA GROUP BY ExtId) A ON BS.Id = A.ExtId 
LEFT JOIN (SELECT ExtId, SUM(p) AS B_total FROM TableB GROUP BY ExtId) B ON BS.Id = B.ExtId 
LEFT JOIN (SELECT ExtId, SUM(p) AS C_total FROM TableC GROUP BY ExtId) C ON BS.Id = C.ExtId 
ORDER BY BS.Id 
+0

こんにちは私は検索を好きにする必要がありますどこTblBase.nameのような '試験'この書き込みですか? –

+0

こんにちはドラえもんのトップコメット –