我有一个拉动的数据,我需要一个SQL语句,但我不能得到正确的语法在Crystal Reports。
此语句工作在SQL:
SELECT
max([meter_reading])
FROM [Forefront].[dbo].[EC_METER_HISTORY_MC]
WHERE [Meter_Number] = '1' AND [Transaction_Date] < '20130101'
GROUP BY
[Company_Code], [Equipment_Code], [Meter_Number]
这就是我把它改为水晶,但我不能得到正确的语法。
SELECT
Maximum({EC_METER_HISTORY_MC.meter_reading})
FROM [EC_METER_HISTORY_MC]
WHERE {EC_METER_HISTORY_MC.Meter_Number} = '1'
AND {EC_METER_HISTORY_MC.Transaction_Date} < {1?Startdate}
GROUP BY {EC_METER_HISTORY_MC.Company_Code}
,{EC_METER_HISTORY_MC.Equipment_Code}
,{EC_METER_HISTORY_MC.Meter_Number}
你的第一步应该是对SQL表达式的水晶是如何工作的阅读起来。 这里是让你开始一个很好的链接 。
一些您的问题包括:
- 使用参数字段。 SQL表达式是不与CR参数不兼容,无法在其中使用。
- SQL表达式只能按您的报告行返回标量值。 这意味着,你GROUP BY的使用不会起任何作用。
- 您使用大括号的意思是你引用在主报表查询 ,而不是在你想用这个表达式创建子查询这些字段。
下面是会找到一个特定仪表的最大抄表一个简单的例子(对于Oracle,因为这是我所知道的和你没有指定DB你使用):
case when {EC_METER_HISTORY_MC.Meter_Number} is null then null
else (select max(Meter_Reading)
from EC_METER_HISTORY_MC
where Meter_Number={EC_METER_HISTORY_MC.Meter_Number} --filter by the meter number from main query
and Transaction_Date < Current_Date) --filter by some date. CAN'T use parameter here.
end
你不能在一个SQL表达式中使用参数字段,可悲。 也许你能够关联Transaction_Date
在主查询表。 否则,我会建议使用的命令。
您有命令两个选项:
- 使用单个命令对象为整个报告数据源 - 它涉及(潜在)返工相当数量。
- 一个命令添加到现有的表集(在数据库“专家”)。 根据需要将其链接到其它表。 这将进行第二次
SELECT
,并在内存中加入的结果(WhileReadingRecords,如果我没有记错的话)。 轻微的性能损失可能值得我们的利益。