2016-08-30 7 views
2

ユーザーの借方と貸方取引の合計の差異を見つけ出し、それらを一覧にしたいと考えています。異なるユーザーの列の合計の差を見つける

ここに私が試しているクエリされています

SELECT *, (val1 - val2) 
FROM (SELECT *, sum(transactionAmount) AS val1 
     FROM tableTransaction 
     WHERE creditedToNum = My_Number 
     GROUP BY debtToNum) db 
JOIN (SELECT *, sum(transactionAmount) AS val2 
     FROM tableTransaction 
     WHERE debtToNum = My_Number 
     GROUP BY creditedToNum) Cr 
WHERE db.transactionStatus = 1 
    AND db.isActive = 1; 

をそれが0行を返すだが、実際の出力は、ここで
以下のようにする必要がありますが、私のテーブル構造である:

| Amount | Credit_to | Debit_to | 
|--------|-----------|-----------| 
| 2000 | My_Number | Number_1 | 
| 5000 | My_Number | Number_2 | 
| 3000 | Number_1 | My_Number | 
| 4000 | Number_2 | My_number | 
| 2000 | My_Number | Number_2 | 

実際どのような私がしたい結果:

| Name  | Amount | 
|----------|--------| 
| Number_1 | 1000 | 
| Number_2 | 3000 | 
+0

そのクエリは読み取れません。 Javaコードがどのように構築するかは関係ありません。実際のSQLを表示します。そして、現在のクエリの問題は何ですか? –

+0

@ CL。私は私のクエリを更新しました.. –

答えて

1

クエリには結合条件はありません。

SELECT Credit_to AS Name, Amount 
FROM tableTransaction 
WHERE Debit_to = @My_Number 
UNION ALL 
SELECT Debit_to, -Amount 
FROM tableTransaction 
WHERE Credit_to = @My_Number; 
 
| Name  | Amount | 
|----------|--------| 
| Number_1 | 3000 | 
| Number_2 | 4000 | 
| Number_1 | -2000 | 
| Number_2 | -5000 | 
| Number_2 | -2000 | 

それからちょうどグループそれは:

SELECT Name, SUM(Amount) AS Total 
FROM (SELECT Credit_to AS other, Amount 
     FROM tableTransaction 
     WHERE Debit_to = @My_Number 
     UNION ALL 
     SELECT Debit_to AS other, -Amount 
     FROM tableTransaction 
     WHERE Credit_to = @My_Number) 
GROUP BY Name 
ORDER BY Name; 
 
| Name  | Total | 
|----------|-------| 
| Number_1 | 1000 | 
| Number_2 | -3000 | 
代わりに参加するの

は、有用な形態にデータを持ってcompound queryを使用するように良いアイデアかもしれません

関連する問題