2012-01-16 19 views
1

を生成しません。SQLのGROUPは、私は2つのテーブルを持っている個別の行

T1:

DATE  NAME  DEBIT CREDIT 
01.01.12 dad     5000 
01.01.12 mum     6000 
05.01.12 school  1000  
01.02.12 dad     5000 
01.02.12 mum     6000 
10.02.12 tuition  300 
10.02.12 snacks  100 
01.03.12 dad     5000 
01.03.12 mum     6000 
01.03.12 books  500 
02.03.12 rice  500 
02.03.12 vegetables 900 
03.03.12 snacks  100 
01.04.12 dad     5000 
01.04.12 mum     6000 
01.04.12 meat  200 
21.04.12 guest  800 

T2:(obal +クレジット - デビット)の

DATE  NAME  TYPE  OBAL 
01.01.12 dr fee  medical  8000 
01.01.12 medicine medical  -10000 
01.01.12 dad   income  400000 
01.01.12 mum   income  450000 
05.01.12 school  education 0 
10.02.12 tuition  education 0 
10.02.12 snacks  misc  0 
01.03.12 books  education 0 
02.03.12 rice  food  0 
02.03.12 vegetables food  0 
01.04.12 meat  food  0 
21.04.12 guest  misc  0 

和型(T2)でグループ化された各名が期待されます。クエリを使用して出力を得るには、次のとおりです。

SELECT 
    t2.type, obal + SUM(NVL(credit - debit, 0)) as bal 
FROM t2 
LEFT JOIN t1 ON t2.name = t1.name 
GROUP BY 
    t2.type, t2.obal 

結果:

TYPE  BAL 
education -1800 
food  -1600 
income  420000 
income  474000 
medical  -10000 
medical  8000 
misc  -1000 

私の質問は:なぜタイプincomemedicalが使用されているGROUP BY句にもかかわらず、クエリ出力に二回来なければなりません?私は列の前にDISTINCT句を追加しようとしたt2.typeと同じ出力を生成する!私は観察することができたことの一つは、T2が同じ名前タイプincomeの2つのレコードに一致T1にレコードを持っていないテーブルでmedical型の2つのレコードが非ゼロobal中を持っているということですt2。この問題を克服するために私を助けてください。

+0

データベース情報を言及していないため申し訳ありません。 Windows 7でMicrosoft Visual Foxpro 9.0を使用しています。 – Ganapathy

答えて

1

問題は、あなたがちょうどtypeだけでなく、obalでグループ化していないことです。

試してみてください。

select type,sum(bal) as bal 
from(
    SELECT t2.type, obal + SUM(NVL(credit - debit, 0)) as bal FROM t2 LEFT JOIN t1 ; 
    ON t2.name = t1.name GROUP BY t2.type, t2.obal 
)a 
group by type; 
+0

これはMS VFP 9.0では動作しませんでしたが、2つのクエリとして実行すると完全でした。ありがとうたくさん:-) – Ganapathy

+0

これを答えとしてマークし、このスレッドを閉じる方法? – Ganapathy

0

あなたのグループby節からt2.obalを削除してください。

SELECT t2.type, SUM(NVL(credit - debit, 0), obal) as bal 
FROM t2 LEFT JOIN t1 ON t2.name = t1.name 
GROUP BY t2.type 
+0

データベース情報について言及していないのは残念です。Windows 7でMicrosoft Visual Foxpro 9.0を使用しています。 – Ganapathy

+0

GROUP BY句でobalを削除すると、 'GROUP BY'句が見つからないか無効です。 – Ganapathy

+0

@ Ganapathyデータベースのドキュメントを理解していれば、今のところこの関数を呼び出す(私が編集した)関数を呼び出すことができます。 –

2

次の2つのグループ化列があります。両方の値の明確な組み合わせによって....

GROUP BY t2.type, t2.obal 

データベースグループ値を!

2

とは別物の組み合わせtype, obalです。

typeにしかグループ化しない場合は、それぞれのタイプに重複するエントリはありませんが、obalフィールドの処理方法を決定する必要があります。

関連する問題