私はこのVB(名前char(25)、金額numeric(6)、ret_date日付)のようなテーブルを持っています:
Name Amount Ret_date ---- ------ -------- abc 500 2011-01-21 def 200 2011-01-20 ghi 1000 xyz 800 2011-01-22 def 200 def 400 2011-02-01 pqr 2100 2011-02-12 abc 3000 abc 4100 xyz 700 2011-01-22
私が欲しかったのは(個別の名前のret_dateに基づくカウント:合計カウント、リターンカウント、保留中のカウント):
Name tc rc pc
abc 3 1 2
def 3 2 1
xyz 2 2 0
ghi 1 0 1
pqr 1 1 0
次のクエリを試しましたが、何も機能しませんでした。
SELECT vb.name, COUNT(*) tc, r.rc, p.pc FROM vb, ;
(SELECT name, COUNT(*) rc FROM vb WHERE ret_date != {} group BY name) r, ;
(SELECT name, COUNT(*) pc FROM vb WHERE ret_date = {} group BY name) p ;
GROUP BY vb.name ORDER BY tc desc
SELECT vb.name, COUNT(*) tc, r.rc, p.pc FROM vb ;
LEFT JOIN (select name, COUNT(*) rc FROM vb WHERE ret_date != {} group BY name) r ON r.name = vb.name ;
LEFT JOIN (select name, COUNT(*) pc FROM vb WHERE ret_date = {} group BY name) p ON p.name = vb.name ;
GROUP BY vb.name
SELECT vb.name, COUNT(*) tc, r.rc, p.pc FROM vb ;
LEFT JOIN (select r.name, COUNT(*) rc FROM vb r WHERE ret_date != {} group BY name) r ON r.name = vb.name ;
LEFT JOIN (select p.name, COUNT(*) pc FROM vb p WHERE ret_date = {} group BY name) p ON p.name = vb.name ;
GROUP BY vb.name
3つの個別のクエリ(合計カウント、ret_dateのカウント= {}、ret_date!= {})でカウントを取得できましたが、単一のクエリを使用して同時に取得することはできません。希望の出力を得るのを手伝ってください。私はSQLに不慣れで、基本を理解できますが、結合やサブクエリなどはまだ理解しにくいです。クエリの機能を説明できれば助かります。
注:私はMS Visual Foxpro 9.0(Windows 7)を使用しています。{}は、Foxproで日付型の空を表すために使用される表記であり、!=は演算子と等しくありません。
どうもありがとう。