视图或Crystal Reports中的前N个?

时间:2010-06-23 18:42:08

标签: sql crystal-reports

我想知道是否可以使用视图从表中获取前5行。 我发现Crystal报告似乎没有内置任何东西来做这件事,或者我会在那里做。

当我查询视图Select * from qryTranHistory时,它会返回前5个项目,但如果我尝试选择特定类型Select * from qryTranHistory Where tID = 45,它将不返回任何内容,因为前5个中没有tID = 45一般。

是否可以这样做?
可以在Crystal Reports的子报表中完成吗?

7 个答案:

答案 0 :(得分:5)

很容易将报告限制在前5条记录中。在菜单中,只需选择

报告 - >选择公式...... - >组

在公式中,输入“RecordNumber< = 5”,您就完成了。

您无需使用组字段或汇总字段来执行组过滤。您不需要排序顺序,但使用没有排序顺序的前N个记录通常没有多大意义。它可能不像OMG小马所建议的那样高效,但对于少量记录,这是可以的。

答案 1 :(得分:2)

您可以从Crystal Reports引用一个sproc。在sproc中,对参数使用条件。


ALTER PROCEDURE dbo.Get_TOP5
    (
    @tID INT = NULL
    )
AS
IF @tID IS NULL
    BEGIN
        SELECT TOP 5            
            FIELD1,
            FIELD2

        FROM qryTranHistory 
    END
ELSE
    BEGIN
        SELECT          
            FIELD1,
            FIELD2

        FROM qryTranHistory 

        WHERE tID =@tID
    END

答案 2 :(得分:2)

简单的设置可以将记录限制在前5!如果您使用的是.Net 1.1(在更高的框架中也有类似的选项安排!)。

  • 右键点击报告布局>报告> Top N / Sort Group Expert>在下拉菜单中选择前N ,询问您要执行的过滤/排序类型>设置顶部 N 的值(在您的情况下为5)>取消选中包含其他记录的选项。 您的报告将仅针对数据集中的前5条记录进行过滤。

还有另一种方法可以做到这一点,那就是通过记录选择公式来限制记录数量,正如John Price在这个帖子中所建议的那样。

干杯!

答案 3 :(得分:0)

您可以将TOP放在SELECT语句中而不是视图中吗?

SELECT TOP 5
    col1,
    col2,
    ...
FROM
    qryTranHistory
WHERE
    tid = 45

答案 4 :(得分:0)

如果你的表有超过5行我希望这个查询:

SELECT * FROM qryTranHistory

返回超过5行,因为你从未提及过TOP 5。 你的问题没有多大意义,因为我不确定你是不是在追求。 您提到如果您使用WHERE tID = 45运行查询,它什么也不返回,您希望它返回什么内容?

在BOL中阅读TOP

SELECT TOP 10 Recs FROM Records WHERE...

顺便说一下,您不希望在报表/表单界面中执行此操作,您希望在数据库层中执行此操作。

答案 5 :(得分:0)

可以在Crystal Reports中执行前N个处理,但它有点模糊 - 您必须使用组排序专家(为了使用它,您需要有组和摘要字段插入组。)

在可能的情况下,在查询中进行前N个处理应该更有效。

答案 6 :(得分:0)

如果你有一个小的记录集,你可以创建一个计算行变化的运行总计(field1),然后在详细信息的Section Expert中,告诉它将RTotal0(你的运行总变量)压缩到> 5