A converter a declaração SQL para o campo de expressão SQL nos relatórios de cristais

Tenho uma declaração SQL que puxa os dados de que preciso, mas não consigo acertar a sintaxe nos relatórios de Cristal.

esta declaração funciona em 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]
Foi para isto que o mudei em crystal, mas não consigo a sintaxe certa.

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}
Author: Bridge, 2013-01-30

2 answers

O teu primeiro passo deve ser ler como as expressões SQL funcionam no cristal. Aqui está uma boa ligação para começar.

Alguns dos seus problemas incluem:

  1. usando um campo de parâmetros. As expressões SQL não são compatíveis com o CR parâmetros e não podem ser usados neles.
  2. As expressões SQL só podem devolver os valores escalares por linha do seu relatório. Isso significa que o seu o uso do grupo BY não serve para nada.
  3. O uso de aparelho encaracolado significa que você está referenciando esses campos na consulta principal do relatório em vez de no subquery que você está tentando criar com esta expressão.

Aqui está um exemplo simplificado que iria encontrar a leitura máxima de um medidor em particular (para a Oracle, já que isso é o que eu sei e você não especificou qual DB você está usando):

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
 2
Author: Ryan, 2013-01-30 19:30:44

Não pode usar os campos de parâmetros numa expressão SQL, infelizmente. Talvez você possa correlacionar o {[[0]} com uma tabela na consulta principal. Caso contrário, sugiro usar uma ordem.

Tem duas opções para o comando:

  1. utilize um único objecto de comando como fonte de dados para todo o relatório--o que envolve (potencialmente) uma quantidade razoável de retrabalho.
  2. Adicione um comando ao conjunto de tabelas existente (na Base de dados 'Expert'). Ligue - o a outras tabelas como desejar. Serao execute um segundo SELECT e junte os resultados na memória (enquanto ler os acordes, se não me engano). A pequena performance pode valer a pena.
 0
Author: craig, 2013-01-31 13:14:14