我有一个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}
答案 0 :(得分:2)
您的第一步应该是阅读SQL Expressions在Crystal中的工作方式。 Here is a good link to get you started
您的一些问题包括:
这是一个简化的示例,可以找到特定仪表的最大仪表读数(对于Oracle,因为我知道这一点,而您没有指定您正在使用的数据库):
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
答案 1 :(得分:0)
遗憾的是,您无法在SQL表达式中使用参数字段。也许您可以将Transaction_Date
与主查询中的表关联起来。否则,我建议使用命令。
命令有两个选项:
SELECT
并将结果连接到内存中(WhileReadingRecords,如果我没有记错的话)。轻微的性能打击可能值得我们受益。