Problema na geração do SQL em resumo

Boa tarde pessoal estou com um problema que acredito ser um BUG

tenho essa consulta que funciona, mas quando realizo a quebra e o resumo dela me da essa mensagem, acredito que seja referente a essa macro sc_sel_esp

consulta:

SELECT distinct
parcial.terminal,
parcial.serie,
parcial.pedido,
parcial.caixa,
parcial.forma,
parcial.valor,
itens.data,
itens.operador
FROM
parcial INNER JOIN itens ON parcial.terminal = itens.terminal AND parcial.pedido = itens.pedido AND parcial.serie = itens.serie
WHERE parcial.cpf = [mcpf]

Mensagem

Erro ao acessar o banco de dados
Unknown column ‘parcial.cpf’ in ‘where clause’
select count(*), sum(valor),forma from (select distinct parcial.terminal, parcial.serie, parcial.pedido, parcial.caixa, parcial.forma, parcial.valor, itens.data, itens.operador from parcial INNER JOIN itens ON parcial.terminal = itens.terminal AND parcial.pedido = itens.pedido AND parcial.serie = itens.serie where (parcial.cpf = 33433878862) and ( itens.data between ‘2025-01-01 15:31:52’ and ‘2025-07-31 15:31:52’ ) ) sc_sel_esp where (parcial.cpf = 33433878862) and ( itens.data between ‘2025-01-01 15:31:52’ and ‘2025-07-31 15:31:52’ ) group by forma order by forma

Resposta do CHATGPT: (Veja se faz sentido)


:bulb: Causa do Erro

Quando você usa DISTINCT no SQL principal da consulta no Scriptcase, e ele precisa montar consultas auxiliares (como as de totalização/resumo), ele gera um SELECT em cima de outro SELECT, como este:

SELECT COUNT(*), SUM(valor), forma 
FROM (
  SELECT DISTINCT ...
  FROM ...
  WHERE ...
) sc_sel_esp 
WHERE ...
GROUP BY forma

Só que no SELECT DISTINCT ..., a coluna parcial.cpf não está entre as colunas retornadas, então não pode ser usada no WHERE externo. Isso é o que causa o erro.


:white_check_mark: Solução 1 – Adicione parcial.cpf no SELECT principal

Modifique seu SELECT no Scriptcase para incluir parcial.cpf (mesmo que você não vá usá-lo visualmente):

SELECT DISTINCT
parcial.terminal,
parcial.serie,
parcial.pedido,
parcial.caixa,
parcial.forma,
parcial.valor,
itens.data,
itens.operador,
parcial.cpf  -- <- Adicionado
FROM
parcial 
INNER JOIN itens 
  ON parcial.terminal = itens.terminal 
  AND parcial.pedido = itens.pedido 
  AND parcial.serie = itens.serie
WHERE parcial.cpf = [mcpf]

Isso vai evitar que o Scriptcase “perca” a coluna ao montar os SQLs internos de totalização/quebra.


:white_check_mark: Solução 2 – Evite DISTINCT se possível

Se você puder garantir que não há duplicatas (ou usar GROUP BY corretamente), experimente remover o DISTINCT — ele costuma atrapalhar nos relatórios com quebras e resumos no Scriptcase.


:white_check_mark: Solução 3 – Criar uma View no banco

Se o problema persistir ou o SQL ficar muito complexo, crie uma VIEW no banco de dados, com todos os filtros e joins que você precisa, e aponte a aplicação do Scriptcase para essa VIEW.

Exemplo da view:

CREATE VIEW vw_parcial_itens AS
SELECT 
  parcial.terminal,
  parcial.serie,
  parcial.pedido,
  parcial.caixa,
  parcial.forma,
  parcial.valor,
  itens.data,
  itens.operador,
  parcial.cpf
FROM parcial 
INNER JOIN itens 
  ON parcial.terminal = itens.terminal 
  AND parcial.pedido = itens.pedido 
  AND parcial.serie = itens.serie;

Depois, no Scriptcase:

SELECT *
FROM vw_parcial_itens
WHERE cpf = [mcpf]

Obrigado Cesar,
acho que a solução é retirar o DISTINCT ai funciona
O Scriptcase se perde com ele

Não utilize clausula where no select.

Use a macro sc_select_where(add).

Boa tarde Haroldo,
Já havia tentado com essa macro, mas mesmo assim não funcionou, quando coloca o DISTINCT
da o mesmo erro.

Obrigado pela ajuda