我想知道是否可以使用视图从表中获取前5行。 我发现Crystal报告似乎没有内置任何东西来做这件事,或者我会在那里做。
当我查询视图Select * from qryTranHistory
时,它会返回前5个项目,但如果我尝试选择特定类型Select * from qryTranHistory Where tID = 45
,它将不返回任何内容,因为前5个中没有tID = 45一般。
是否可以这样做?
可以在Crystal Reports的子报表中完成吗?
答案 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(在更高的框架中也有类似的选项安排!)。
还有另一种方法可以做到这一点,那就是通过记录选择公式来限制记录数量,正如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