パラメータ化されたクロス集計クエリが必要です。パラメータ部分を除いて、ほとんどうまくいきました。適用するパラメーターは、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にあります。
これを達成するための正しい方法は何ですか?