Perguntas chamada de função SQL 2008 utilizando DBO em minúsculo

Mais
10 anos 4 meses atrás #30784 por roberto.junior@maxgear.com.br
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 :
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.

Mais
10 anos 4 meses atrás #30785 por kanaamlrr
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.

Mais
10 anos 4 meses atrás #30786 por roberto.junior@maxgear.com.br
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:
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.

Mais
10 anos 4 meses atrás #30791 por kanaamlrr
Beleza!!!
Valeu por compartilhar a resposta final!
Precisando é só chamar ai!
Abraço!

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 4 meses atrás #30796 por roberto.junior@maxgear.com.br
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.

Por favor Acessar ou Registrar para participar da conversa.

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