1

注文のヘッダー/詳細レコードを返す PICK シートの SQL ステートメントがあります。SQL のフィールドの 1 つは、基本的に危険物があるかどうかを示すフィールドです。注文の 1 つの製品にそれに対するコードがある場合、レポートにはその製品が危険であることが表示されます。

私が抱えている問題は、レポートのヘッダー セクション (詳細セクションではなく) にコードを配置しているため、SQL の結果では、最初の行でのみコードを探していることです。

基本的に「これらの行の1つにこのコードがある場合、これらのすべての行にこのコードを持たせる」と言うSQLを使用する方法はありますか? ここで副選択が機能すると思います... 問題は、FoxPro 上に構築されたレガシー システムを使用していて、FoxPro SQL がひどいことです!

編集:チェックしたところ、VFP8を実行しています.SELECTステートメントのサブクエリはFVP9に追加されました:(

4

2 に答える 2

0
SELECT Header.HeaderId, Header.HeaderDescription, 
    Detail.DetailId, Detail.DetailDescription, Detail.Dangerous, 
    Danger.DangerousItems
FROM Header
INNER JOIN Detail ON Header.HeaderId = Detail.HeaderId
LEFT OUTER JOIN 
    (SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId) Danger ON Header.HeaderId = Danger.HeaderId

> 0 の場合Danger.DangerousItems、何か危険です。Null の場合、何も危険ではありません。

ネストされたクエリを実行できない場合は、ネストされた選択用にビューのようなオブジェクト (VFP8 ではクエリと呼ばれる) を作成できるはずです。

SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous = 1 GROUP BY HeaderId

そして、あなたはそれに参加することができますか?

于 2012-10-31T05:21:40.397 に答える
0

VFP 8 以前では、次の 3 つのクエリを続けて使用することをお勧めします。

SELECT Header.HeaderId, Header.HeaderDescription, Detail.DetailId, Detail.DetailDescription, Detail.Dangerous, Danger.DangerousItems FROM Header INNER JOIN Detail ON Header.HeaderId = Detail.HeaderId INTO CURSOR csrDetail

SELECT HeaderId, COUNT(*) AS DangerousItems FROM Detail WHERE Dangerous GROUP BY HeaderId INTO CURSOR csrDanger

SELECT csrDetail.*, csrDanger.DangerousItems FROM csrDetail.HeaderID = csrDanger.HeaderID INTO CURSOR csrResult

于 2012-10-31T20:43:33.050 に答える