× Linguagem de Programação ADVPL

Perguntas Query funciona no SQL mas dá erro no Protheus

Mais
11 anos 6 meses atrás #14100 por denis86
Boa tarde!

Estou tentando executar um relatório customizado mas o mesmo está dando
erro.
"THREAD ERROR (Totvs,PC) 17/05/2013 16:10:56
: Error : 156 (37000) (RC=-1) - [Microsoft][SQL Server Native Client 10.0][SQL
Server]Sintaxe incorreta próxima à palavra-chave 'FROM'. ( From
tMSSQLConnection::GetQueryFile )"

A query foi verificada, foi realizado testes direto no Management do SQL Server e a consulta está ok, no SQL ele faz a consulta normalmente mas quando a mesma é executada no Query Analyzer (APSDU) o mesmo erro
acima é apresentado).
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 6 meses atrás #14105 por kanaamlrr
cara, posta sua query ae na imagem não dá para ver

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 6 meses atrás - 11 anos 6 meses atrás #14107 por denis86
Segue ela:

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, LHR_ITEM, LHR_DESCR, LHR_QTDADE, LHQ_FUNC ,
CASE WHEN LHR_TIPMOE='1' THEN LHR_VLRREM WHEN LHR_TIPMOE<>'1'THEN 0 END LHR_VLRREM
FROM LHQ020 LHQ1 INNER JOIN LHR020 LHR ON LHR.D_E_L_E_T_ <> '*' AND LHR_FILIAL = '00' AND LHR_CODIGO = LHQ1.LHQ_CODIGO
WHERE LHQ1.D_E_L_E_T_ <> '*' AND LHQ1.LHQ_FILIAL = '00'
AND LHQ1.LHQ_EMPCLI = '99999 '
AND LHQ1.LHQ_PROJET = '999990001 0001'

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'HOSPEDAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRHOS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0
ELSE (LHQ_VLRHOS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS UNION SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ2 WHERE LHQ2.D_E_L_E_T_ <> '*' AND LHQ2.LHQ_FILIAL = '00'
AND LHQ2.LHQ_EMPCLI = '99999 '
AND LHQ2.LHQ_PROJET = '999990001 0001'
AND LHQ2.LHQ_VLRHOS > 0

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'PASSAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRPAS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS UNION SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0
ELSE (LHQ_VLRPAS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA

FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ WHERE LHQ.D_E_L_E_T_ <> '*' AND LHQ_FILIAL = '00'
AND LHQ_EMPCLI = '99999 '
AND LHQ_PROJET = '999990001 0001'
AND LHQ_VLRPAS > 0
Ultima edição: 11 anos 6 meses atrás por denis86.

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 6 meses atrás #14111 por kanaamlrr
o erro tá ali
tem 2 "FROM" no mesmo trecho



SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, LHR_ITEM, LHR_DESCR, LHR_QTDADE, LHQ_FUNC ,
CASE WHEN LHR_TIPMOE='1' THEN LHR_VLRREM WHEN LHR_TIPMOE<>'1'THEN 0 END LHR_VLRREM
FROM LHQ020 LHQ1 INNER JOIN LHR020 LHR ON LHR.D_E_L_E_T_ <> '*' AND LHR_FILIAL = '00' AND LHR_CODIGO = LHQ1.LHQ_CODIGO
WHERE LHQ1.D_E_L_E_T_ <> '*' AND LHQ1.LHQ_FILIAL = '00'
AND LHQ1.LHQ_EMPCLI = '99999 '
AND LHQ1.LHQ_PROJET = '999990001 0001'

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'HOSPEDAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRHOS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0
ELSE (LHQ_VLRHOS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS UNION SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ2 WHERE LHQ2.D_E_L_E_T_ <> '*' AND LHQ2.LHQ_FILIAL = '00'
AND LHQ2.LHQ_EMPCLI = '99999 '
AND LHQ2.LHQ_PROJET = '999990001 0001'
AND LHQ2.LHQ_VLRHOS > 0

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'PASSAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRPAS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS UNION SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0

ELSE (LHQ_VLRPAS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA

FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ WHERE LHQ.D_E_L_E_T_ <> '*' AND LHQ_FILIAL = '00'
AND LHQ_EMPCLI = '99999 '
AND LHQ_PROJET = '999990001 0001'
AND LHQ_VLRPAS > 0

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 6 meses atrás #14120 por denis86
A query estava mal identada mas não era dois FROM juntos, tem um select e um union no meio.
Essa query se cada bloco for executado separadamente, sem union, funciona normalmente no protheus mas se juntar os blocos com union dá esse erro, no SQL Server Management Studio roda funciona sem erro.

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, LHR_ITEM, LHR_DESCR, LHR_QTDADE, LHQ_FUNC ,
CASE WHEN LHR_TIPMOE='1' THEN LHR_VLRREM WHEN LHR_TIPMOE<>'1'THEN 0 END LHR_VLRREM
FROM LHQ020 LHQ1 INNER JOIN LHR020 LHR ON LHR.D_E_L_E_T_ <> '*' AND LHR_FILIAL = '00' AND LHR_CODIGO = LHQ1.LHQ_CODIGO
WHERE LHQ1.D_E_L_E_T_ <> '*' AND LHQ1.LHQ_FILIAL = '00'
AND LHQ1.LHQ_EMPCLI = '99999 '
AND LHQ1.LHQ_PROJET = '999990001 0001'

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'HOSPEDAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRHOS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0
ELSE (LHQ_VLRHOS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ2 WHERE LHQ2.D_E_L_E_T_ <> '*' AND LHQ2.LHQ_FILIAL = '00'
AND LHQ2.LHQ_EMPCLI = '99999 '
AND LHQ2.LHQ_PROJET = '999990001 0001'
AND LHQ2.LHQ_VLRHOS > 0

UNION ALL

SELECT LHQ_CODIGO, LHQ_EMISS, LHQ_PEDIDO, '000' LHR_ITEM, 'PASSAGEM' LHR_DESCR, 1 LHR_QTDADE, LHQ_FUNC ,
CASE WHEN '1'='1' THEN LHQ_VLRPAS
WHEN (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION

SELECT MAX(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) =0 THEN 0
ELSE (LHQ_VLRPAS* (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*') ) / (SELECT TOP 1 CASE WHEN '1'='2' THEN M2_MOEDA2

ELSE 1 END TAXA FROM SM2020 SM2
WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA IN (SELECT MIN(M2_DATA) M2_DATA
FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*' AND M2_DATA >= LHQ_EMISS

UNION ALL

SELECT MAX(M2_DATA) M2_DATA

FROM SM2020 SM2 WHERE SM2.D_E_L_E_T_<>'*') ) ) END LHR_VLRREM
FROM LHQ020 LHQ WHERE LHQ.D_E_L_E_T_ <> '*' AND LHQ_FILIAL = '00'
AND LHQ_EMPCLI = '99999 '
AND LHQ_PROJET = '999990001 0001'
AND LHQ_VLRPAS > 0

Por favor Acessar ou Registrar para participar da conversa.

Mais
11 anos 5 meses atrás #14256 por henry.charriere
Denis, elas estão rodando separadamente porque o Union está com um pequeno problema;

1 - Quando você faz union a quantidade de colocar deverá ser a mesma em todas as consultas, pelo que vi da sua consulta não está assim.

Até agora vi só isso!

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.118 segundos
Joomla templates by a4joomla