1

必要なデータを取得する 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]

これは Crystal で変更したものですが、正しい構文を取得できません。

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}
4

2 に答える 2

2

最初のステップは、CrystalでSQL式がどのように機能するかを理解することです。ここにあなたが始めるための良いリンクがあります

問題のいくつかは次のとおりです。

  1. パラメータフィールドの使用。SQL式はCRパラメーターと互換性がなく、CRパラメーターで使用することはできません。
  2. SQL式は、レポートの行ごとにのみスカラー値を返すことができます。つまり、GROUPBYを使用しても目的はありません。
  3. 中括弧を使用するということは、この式で作成しようとしているサブクエリではなく、メインレポートクエリでこれらのフィールドを参照していることを意味します。

これは、特定のメーターの最大メーター読み取り値を見つける簡単な例です(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
于 2013-01-30T19:30:44.910 に答える