2012-04-20 19 views
3

実際にCrystal Reports v12(2008)レポートを作成していますが、Crystalを使用して次のような方法を見つけることができません。私は誰かがSQL言語で答えるかもしれないと思った。子が特定の値を含むparentを選択するSQL

2テーブル:hbmast、

SELECT hbmast.custno, hbmast.id, ddmast.name, ddmast.status 
WHERE hbmast.custno = ddmast.custno 
GROUP BY hbmast.id 
pseudo code::show all hbmast values that have ddmast.status = '2' 

ddmast出力例:

J0001, 111222, PAUL JONES, 1 
     111222, PAUL JONES, 2 
     111222, PAUL JONES, 1 

K0001, 555333, PETER KING, 3 
     555333, PETER KING, 1 

私はすべての子レコードをレポート上のポール・ショーを持っていると思いますが、ピーターは、レポートに返されるべきではありませんddmast.statusフィールドに '2'の子レコードがないためです。ヘルプ

答えて

2

方法は、あなたのHBとDDテーブルDDテーブルの2番目の別名を持っているだろうクリスタルでこれを実現しています。

したがって、ステータス= 2のddエイリアステーブルをフィルタリングして、hbテーブルに参加し、エイリアスではなくddテーブルに戻します。 SQLは、のように見える終わるでしょう:

select hb.custno, hb.id, dd.name, dd.status from hbmast hb 
inner join ddmast dd on hb.custno = dd.custno 
inner join ddmast dd2 on hb.custno = dd2.custno 
where dd2.status = '2' 

Andomarは、その場合は2の状態にグループごとに1つの以上のレコードがある場合に表示される重複したレコードについて、有効なポイントを作るのことができ、主によってグループのいずれかグループフッターレベルで行情報を表示するか、またはダブルジョイン方法の代わりに選択式でサブクエリを使用するSQL式を使用します。

SQL式:(select count(*) from ddmast where custno = "hbmast.custno" and status = '2')

は、次にレコード選択の専門家:{%sqlexpression} > 0

+0

すばらしい返答と解決策が私を持っている。私には多くの結果がありませんので、私はAndomarの発見を修正する方法を理解することについて心配するつもりはありません。私は彼が記述した結果で終わった。 – macunte

+0

これはどうやって正しいのでしょうか? dd2エイリアスは2回目の結合でも結合されません。 – xQbert

+0

@xQbertクリスタルはグラフィカルデザイナを使用しています.SQLは、クリスタルがどのように翻訳されるかの例です:とにかく入力ミスを修正しました –

4

ため

おかげで私はあなたがこのために探していると思う:

select hb.custno, hb.id, dd.name, dd.status from hbmast hb 
join ddmast dd on hb.custno = dd.custno 
where hb.custno in (
    select custno from ddmast 
    where status = '2' 
) 

が、これはあなたの期待された結果を返す場合、私に教えてください。

1

およびそれを得るための別の方法...

SELECT hb.custno, hb.id, dd.name, dd.status 
FROM hbmast hb 
INNER join ddmast dd 
    on hb.custno = dd.custno 
INNER JOIN DDMAST2 DD2 
    on DD2.custNo = HB.custNo 
    AND DD2.Status='2' 
+3

hbmast' 'ごとに複数の' ddmast'がある場合には、重複行の多くを作成します。 Mostyの 'どこの... in'の解決策はより良いと思われる – Andomar

関連する問題