- Fórum
- Protheus/Microsiga/Totvs
- Instalação e Configuração Protheus
- Banco de Dados
- chamada de função SQL 2008 utilizando DBO em minúsculo
Perguntas chamada de função SQL 2008 utilizando DBO em minúsculo
- roberto.junior@maxgear.com.br
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
8 anos 4 meses atrás #30784
por roberto.junior@maxgear.com.br
Respondido por roberto.junior@maxgear.com.br no tópico chamada de função SQL 2008 utilizando DBO em minúsculo
Kanaãm,
A única solução foi remover o SEGUNDO SUM da subquery, assim, tenho agora dois SUM's distintos um abatendo o resultado do outro, veja :
Dessa forma funcionou a contento, vou continuar testando outros resultados e posto aqui os finalmente pra que os demais amigos possam ser ajudados, caso necessário.
Obrigado pela atenção, sempre.
Abraço.
Roberto
A única solução foi remover o SEGUNDO SUM da subquery, assim, tenho agora dois SUM's distintos um abatendo o resultado do outro, veja :
Select SUM(SC6.C6_QTDVEN) - IsNull((SELECT SUM(ZAA_.ZAA_QTDE) FROM ZAA010 ZAA_ WHERE ZAA_.ZAA_NUM = SC6.C6_NUM AND ZAA_.ZAA_ITEM = SC6.C6_ITEM AND ZAA_.D_E_L_E_T_ = ' '),0)-SC6.C6_QTDENT AS QRY_CARTEIRA,
SB1.B1_COD AS QRY_PRODUTO
From SC6010 SC6
INNER JOIN SB1010 SB1
ON SB1.B1_COD = SC6.C6_PRODUTO
AND SB1.B1_TIPO = 'PA'
AND SB1.B1_MSBLQL <> '1'
AND SB1.D_E_L_E_T_ <> '*'
INNER JOIN SC5010 SC5
ON SC5.C5_TIPO = 'N'
AND SC5.C5_NUM = '076264'
AND SC5.C5_NUM = SC6.C6_NUM
AND SC5.C5_EMISSAO >= '20160301'
AND SC5.C5_EMISSAO <= '20160331'
AND SC5.D_E_L_E_T_ <> '*'
INNER JOIN SF4010 SF4
ON SF4.F4_CODIGO = SC6.C6_TES
AND SF4.F4_TESVEN = 'S'
AND SF4.D_E_L_E_T_ <> '*'
WHERE SC6.D_E_L_E_T_ <> '*'
GROUP BY SB1.B1_COD, SC6.C6_NUM, SC6.C6_ITEM, SC6.C6_QTDENT
ORDER BY QRY_PRODUTO
Dessa forma funcionou a contento, vou continuar testando outros resultados e posto aqui os finalmente pra que os demais amigos possam ser ajudados, caso necessário.
Obrigado pela atenção, sempre.
Abraço.
Roberto
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
8 anos 4 meses atrás #30785
por kanaamlrr
Respondido por kanaamlrr no tópico chamada de função SQL 2008 utilizando DBO em minúsculo
Cara, não cheguei a testar pois não tenho todas as tabelas, mas veja se funciona dessa forma:
WITH CTE AS (
SELECT SUM(ISNULL(ZAA_QTDE,0)) AS QTDE,ZAA_.ZAA_NUM,ZAA_.ZAA_ITEM,ZAA_.ZAA_COD
FROM ZAA010 ZAA_, ZA9010 ZA9_
WHERE ZA9_.ZA9_CONSID = 'S'
AND ZAA_.ZAA_MOTIVO = ZA9_.ZA9_MOTIVO
AND ZAA_.ZAA_MOTIVO = ZA9_.ZA9_MOTIVO
AND ZAA_.D_E_L_E_T_ <> '*'
AND ZA9_.D_E_L_E_T_ <> '*')
GROUP BY ZAA_NUM, ZAA_ITEM, ZAA_COD
)
Select SUM(SC6.C6_QTDVEN-IsNull(( QTDE,0)-SC6.C6_QTDENT) AS QRY_CARTEIRA,
SB1.B1_COD AS QRY_PRODUTO
From SC6010 SC6
INNER JOIN SB1010 SB1
ON SB1.B1_COD = SC6.C6_PRODUTO
AND SB1.B1_TIPO = 'PA'
AND SB1.B1_MSBLQL <> '1'
AND SB1.D_E_L_E_T_ <> '*'
INNER JOIN SC5010 SC5
ON SC5.C5_TIPO = 'N'
AND SC5.C5_NUM = '076264'
AND SC5.C5_NUM = SC6.C6_NUM
AND SC5.C5_EMISSAO >= '20160301'
AND SC5.C5_EMISSAO <= '20160331'
AND SC5.D_E_L_E_T_ <> '*'
INNER JOIN SF4010 SF4
ON SF4.F4_CODIGO = SC6.C6_TES
AND SF4.F4_TESVEN = 'S'
AND SF4.D_E_L_E_T_ <> '*'
LEFT JOIN CTE ON
ZAA_NUM = SC6.C6_NUM
AND ZAA_ITEM = SC6.C6_ITEM
AND ZAA_COD = SC6.C6_PRODUTO
WHERE SC6.D_E_L_E_T_ <> '*'
GROUP BY SB1.B1_COD
ORDER BY QRY_PRODUTO
Por favor Acessar ou Registrar para participar da conversa.
- roberto.junior@maxgear.com.br
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
8 anos 4 meses atrás #30786
por roberto.junior@maxgear.com.br
Respondido por roberto.junior@maxgear.com.br no tópico chamada de função SQL 2008 utilizando DBO em minúsculo
Bom dia, Kanaãm!
Perfeito meu amigo, excelente ideia a sua que resolveu definitivamente o meu problema. Anteriormente, na query que eu postei, ainda teria que tratar os vários retornos de um mesmo produto devido ao group by por produto, pedido e etc, mas do seu jeito, recebo o sum do produto único e é só partir pro abraço.
A query ficou assim, fiz uns ajustes com recolocação de parenteses nos locais corretos:
Meu muito obrigado pela ajuda e suporte.
Sucesso em sua vida.
Abraço.
Roberto.
Perfeito meu amigo, excelente ideia a sua que resolveu definitivamente o meu problema. Anteriormente, na query que eu postei, ainda teria que tratar os vários retornos de um mesmo produto devido ao group by por produto, pedido e etc, mas do seu jeito, recebo o sum do produto único e é só partir pro abraço.
A query ficou assim, fiz uns ajustes com recolocação de parenteses nos locais corretos:
WITH CTE AS (SELECT SUM(ZAA_QTDE) AS RESIDUO,ZAA_.ZAA_NUM,ZAA_.ZAA_ITEM,ZAA_.ZAA_COD
FROM ZAA010 ZAA_, ZA9010 ZA9_
WHERE ZA9_.ZA9_CONSID = 'S'
AND ZAA_.ZAA_MOTIVO = ZA9_.ZA9_MOTIVO
AND ZAA_.D_E_L_E_T_ <> '*'
AND ZA9_.D_E_L_E_T_ <> '*'
GROUP BY ZAA_NUM, ZAA_ITEM, ZAA_COD)
Select SUM(SC6.C6_QTDVEN-IsNull(RESIDUO,0)-SC6.C6_QTDENT) AS QRY_CARTEIRA,
SB1.B1_COD AS QRY_PRODUTO
From SC6010 SC6
INNER JOIN SB1010 SB1
ON SB1.B1_COD = SC6.C6_PRODUTO
AND SB1.B1_TIPO = 'PA'
AND SB1.B1_MSBLQL <> '1'
AND SB1.D_E_L_E_T_ <> '*'
INNER JOIN SC5010 SC5
ON SC5.C5_TIPO = 'N'
--AND SC5.C5_NUM = '076264'
AND SC5.C5_NUM = SC6.C6_NUM
AND SC5.C5_EMISSAO >= '20160301'
AND SC5.C5_EMISSAO <= '20160331'
AND SC5.D_E_L_E_T_ <> '*'
INNER JOIN SF4010 SF4
ON SF4.F4_CODIGO = SC6.C6_TES
AND SF4.F4_TESVEN = 'S'
AND SF4.D_E_L_E_T_ <> '*'
LEFT JOIN CTE
ON ZAA_NUM = SC6.C6_NUM
AND ZAA_ITEM = SC6.C6_ITEM
AND ZAA_COD = SC6.C6_PRODUTO
WHERE SC6.D_E_L_E_T_ <> '*'
GROUP BY SB1.B1_COD
ORDER BY QRY_PRODUTO
Meu muito obrigado pela ajuda e suporte.
Sucesso em sua vida.
Abraço.
Roberto.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
- roberto.junior@maxgear.com.br
- Autor do Tópico
- Desconectado
- Membro Iniciado
Menos
Mais
- Postagens: 11
- Obrigados Recebidos: 0
8 anos 4 meses atrás #30796
por roberto.junior@maxgear.com.br
Respondido por roberto.junior@maxgear.com.br no tópico chamada de função SQL 2008 utilizando DBO em minúsculo
Kanaãm e aos demais amigos,
Quando se utiliza BeginSQL, a opção %noparser% permite que a string não seja avaliada pela função ChangeQuery. No exemplo desse tópico, deixando letras minúsculos (dbo) em letras maiúsculas (DBO) invalidando por exemplo a chamada de uma função.
Então, na utilização de uma string padrão de query utilizando-se o comando TcGenQry dentro do dbUseArea, evitar usar o comando ChangeQuery, e, na utilização do BeginSQL, utiliza-lo com o %noparser%, assim, o que for digitado é respeitado em case sensitive.
Uma outra coisa, percebi que o BeginSQL sem a utilização do %noparser%, escreve na query sintaxes inexistentes, criando por exemplo parenteses aonde não existe, from no meio de where e etc, uma doideira.
Para maiores informações, tdn.totvs.com/display/tec/Embedded+SQL+-+Facilitador+de+queries
Abraços.
Quando se utiliza BeginSQL, a opção %noparser% permite que a string não seja avaliada pela função ChangeQuery. No exemplo desse tópico, deixando letras minúsculos (dbo) em letras maiúsculas (DBO) invalidando por exemplo a chamada de uma função.
Então, na utilização de uma string padrão de query utilizando-se o comando TcGenQry dentro do dbUseArea, evitar usar o comando ChangeQuery, e, na utilização do BeginSQL, utiliza-lo com o %noparser%, assim, o que for digitado é respeitado em case sensitive.
Uma outra coisa, percebi que o BeginSQL sem a utilização do %noparser%, escreve na query sintaxes inexistentes, criando por exemplo parenteses aonde não existe, from no meio de where e etc, uma doideira.
Para maiores informações, tdn.totvs.com/display/tec/Embedded+SQL+-+Facilitador+de+queries
Abraços.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- Instalação e Configuração Protheus
- Banco de Dados
- chamada de função SQL 2008 utilizando DBO em minúsculo
Tempo para a criação da página:0.153 segundos