Crystal Reports - 返回具有常见成分的产品列表

时间:2012-05-11 19:29:44

标签: crystal-reports formula

在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,再次提供完整的成分清单。

如果产品中使用了所有成分,我需要知道如何退回产品中的所有成分,而不排除该产品中的其他成分。我还需要确保返回使用这些特定成分的数据库中的每个产品。

1 个答案:

答案 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,它将全部选择它们。

希望这有帮助。