1

パラメータ化されたクロス集計クエリが必要です。パラメータ部分を除いて、ほとんどうまくいきました。適用するパラメーターは、ChangeIDとvariant1、variant2、variant3の4つです。ChangeIDは必須であり、ユーザーが入力する必要があります。Variant1..3はオプションです。ユーザーが1つから3つのバリアントを入力するか、(variant1がnullの場合)デフォルトを使用する必要があります。

デフォルトは事前定義されたバリアントの代替であり、実際に入力されたバリアントも代替として適用する必要があります。

私はこのようなことを考えました:

PARAMETERS ChangeID Text (7), variant1 Text (10), variant2 Text (10), variant3 Text (10);
TRANSFORM Sum([Qty]*[inout]) AS QtyInOut
SELECT MatByOrder.CHpoint, MatByOrder.PN, MatByOrder.Description, MatByOrder.Price, MatByOrder.UoM
FROM Variants INNER JOIN MatByOrder ON Variants.BO = MatByOrder.BO

WHERE 
    (MatByOrder.CHpoint=ChangeID) AND 
    (IIF(isNull([variant1]); 
        (Variants.Variant="B100") OR (Variants.Variant="B200") OR (Variants.Variant="B300") OR (Variants.Variant="B400") OR (Variants.Variant="B500");
        (Variants.Variant=[variant1]) OR (Variants.Variant=[variant2]) OR (Variants.Variant=[variant3])
       )
    )

GROUP BY MatByOrder.CHpoint, MatByOrder.PN, MatByOrder.Description, MatByOrder.Price, MatByOrder.UoM

しかし、それは機能しません。もちろん、問題はWHERE句のIIFにあります。

これを達成するための正しい方法は何ですか?

4

2 に答える 2

1

これは機能するはずです:

WHERE 
    (MatByOrder.CHpoint=ChangeID) AND 
    (
       ( ([variant1] IS NULL) AND (Variants.Variant IN ('B200', 'B300', 'B400', 'B500')) )
       OR    
       ( ([variant1] IS NOT NULL) AND (Variants.Variant IN ([variant1], [variant2], [variant3])) )
    )
于 2012-05-31T10:39:55.870 に答える
0

私は自分のロケールでInstrのアイデアをテストしました。ここで、コンマはパラメーターの区切り文字であり、それは私のために機能します。単純なクエリでアイデアを試して、それがどのように適合するかを確認する必要があると思います。

アイデアは:

Instr(Nz(Var,String) & ",",Field & ",")>0

誤った一致を避けるために、フィールドにコンマまたはその他の区切り文字を追加することが重要です。

PARAMETERS ChangeID Text (7), variant1 Text (10), variant2 Text (10), variant3 Text (10);
TRANSFORM Sum([Qty]*[inout]) AS QtyInOut
SELECT MatByOrder.CHpoint, MatByOrder.PN, MatByOrder.Description, MatByOrder.Price, MatByOrder.UoM
FROM Variants INNER JOIN MatByOrder ON Variants.BO = MatByOrder.BO

WHERE 
    (MatByOrder.CHpoint=ChangeID) AND 
    (Instr(Nz([variant1],"B100,B200,B300,B400,B500" 
               & [variant1] & "," & [variant2] & "," 
               & [variant3]) & ",", MatByOrder.CHpoint) > 0
    )

GROUP BY MatByOrder.CHpoint, MatByOrder.PN, MatByOrder.Description, MatByOrder.Price, MatByOrder.UoM
于 2012-05-31T09:34:09.423 に答える