在Crystal Reports 11中,我需要创建一个报表,该报表返回表中具有一组共同列出的成分的所有产品。此外,用户需要能够从一个请求到下一个请求输入不同数量的成分。例如:
我们有Product_1,它由ingredient_1,ingredient_2和Ingredient_3组成 我们有Product_2,它由ingredient_1,ingredient_5,ingredient_6组成。 我们有Product_3,它由ingredient_1,ingredient_2和inredient_7组成。
最终用户需要能够添加最多3种成分,并查看共享这些成分的所有配方。
在查询1中,他会输入Ingredient_1,所有三种产品都应该带有完整的成分列表,而不仅仅是成分_1。
在查询2中,他会输入ingredient_1和ingredient_2,它们应返回产品1& 2,再次提供完整的成分清单。
如果产品中使用了所有成分,我需要知道如何退回产品中的所有成分,而不排除该产品中的其他成分。我还需要确保返回使用这些特定成分的数据库中的每个产品。
答案 0 :(得分:0)
这听起来更像是一个查询/存储过程问题而不是Crystal Reports中的问题。
您的select语句可以是这样的:
DECLARE @ingredient1 VARCHAR(50),
@ingredient2 VARCHAR(50),
@ingredient3 VARCHAR(50)
SELECT *
FROM products
WHERE fld_ProductID IN (SELECT DISTINCT p.fld_ProductID
FROM products p
WHERE p.fld_formulaID IN (SELECT DISTINCT fld_formulaID
FROM formulas
WHERE fld_ingredient = @ingredient1
OR fld_ingredient = @ingredient2
OR fld_ingredient = @ingredient3)
)
这将选择具有这些成分之一的所有公式ID。然后,它将获得具有这些formulaID之一的所有产品的列表,最后它将选择所有产品。这样,如果同一产品有多个formulaID,它将全部选择它们。
希望这有帮助。