Alguém poderia me ajudar a verificar a syntax dessa consulta, não foi eu que a criei, só estou dando manutenção nela pois não está retornando resultado, o erro apresenta-se na parte do COMPUTE.

04/07/2016

0

DECLARE @datainicio AS datetime,
@datafinal AS datetime
SET @datainicio = '20160530'
SET @datafinal = '20160629'
SELECT tabela.Agrupamento,AGRUPAMENTOS.descricao AS DescAgrupamento,
tabela.Segmento,SEGMENTOS.descricao AS DescSegmento,
codgrupo,GRUPOS.Descricao AS DescGrupo,
codsubg,SUBGRUPOS.Descricao AS DescSubGrupos,
codtam,
tamanho,
Vendas,
Qtd,
compras
FROM
(SELECT agrupamento,
Segmento,
codgrupo,
codsubg,
codtam,
tamanho,
SUM(Vendas) AS Vendas,
SUM(Qtd) AS Qtd,
SUM(compras) AS compras
FROM
(SELECT DISTINCT (tam.codigo) AS codtam,

(SELECT SUM (IV1.quantidade)
FROM TblVendidos IV1
LEFT JOIN tblvendas V1 ON (v1.codigo = iv1.codigo_venda)
WHERE data_venda BETWEEN @dataInicio AND @dataFinal
AND IV1.codigo_produto = est.codigo
AND SubCodigo = Qtde.SubCodigo
AND v1.Status <> 'Cancelada'
AND IV1.DEVOLVIDO = 0
AND IV1.TIPO = 0
AND (V1.CODTIPO NOT IN(3,
4,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17)
OR (V1.CODTIPO=15
AND v1.CodForma<>0))) AS Vendas,

(SELECT SUM (IV1.quantidade)
FROM TblVendidos IV1
LEFT JOIN tblvendas V1 ON (v1.codigo = iv1.codigo_venda)
WHERE data_venda BETWEEN @dataInicio AND @dataFinal
AND IV1.codigo_produto = est.codigo
AND SubCodigo = Qtde.SubCodigo
AND V1.Status <> 'Cancelada'
AND IV1.DEVOLVIDO = 0
AND IV1.TIPO = 0
AND (V1.CODTIPO NOT IN(3,
4,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17)
OR (V1.CODTIPO=15
AND v1.CodForma<>0))) AS resVenda,

(SELECT prazomedio
FROM tblcompras
WHERE sequencia =
(SELECT max(sequencia_compra)
FROM tblcompras_itens
WHERE produto = est.codigo))Prazomedio,

(SELECT SUM(quantidade)
FROM tblcompras_itens
WHERE sequencia =
(SELECT max(sequencia)
FROM tblcompras_itens
WHERE produto = est.codigo)) AS quantidade,

(SELECT SUM (qtd1.quantidade)
FROM tblquantidades QTD1
WHERE produto = est.codigo
AND qtd1.subcodigo = Qtde.subcodigo)AS Qtd,

(SELECT SUM (qtd1.quantidade)
FROM tblquantidades QTD1
WHERE produto = est.codigo
AND qtd1.SubCodigo = Qtde.SubCodigo)AS resQuantidade,

(SELECT SUM(i.quantidade)
FROM tblcompras_itens AS i
LEFT JOIN tblCompras AS c ON i.Sequencia_Compra = c.Sequencia
WHERE (i.Enviado =3
OR i.enviado =1
OR i.enviado = 0)
AND i.Produto = est.Codigo
AND i.SubCodigo = qtde.subcodigo
AND c.dataEntrega>'20110212') AS compras,

(SELECT SUM(i.quantidade)
FROM tblcompras_itens AS i
LEFT JOIN tblCompras AS c ON i.Sequencia_Compra = c.Sequencia
WHERE (i.Enviado =3
OR i.enviado =1
OR i.enviado = 0)
AND i.Produto = est.Codigo
AND i.SubCodigo = qtde.subcodigo
AND c.dataEntrega>'20110212') AS comprasres,
est.Ultima_Compra AS UltCompra,
tam.descricao AS tamanho,
est.precovista AS vrvenda,
est.DescricaoComercial material,
est.Custo_Simples custo,
fe.pessoa,
Qtde.SubCodigo,
g.descricao descrgrupo,
g.codigo codgrupo,
g.descricao,
sc.descricao subcodigoDEsc,
est.codigo,
sg.Descricao subgrupo,
sg.Codigo codsubg,
est.codigomarca,
m.descricao AS marca,
SEG.Codigo AS Segmento,
seg.descricao AS DescSegmento,
AGR.Codigo AS Agrupamento,
AGR.Descricao AS DescAgrupamento
FROM tblestoque est
LEFT JOIN TblQuantidades Qtde ON (qtde.produto = est.codigo)
LEFT JOIN tblEstoqueSubCodigos SC ON (sc.codigo = qtde.subcodigo)
LEFT JOIN tblmarcas m ON m.codigo =est.codigomarca
LEFT JOIN tblfornecest Fe ON fe.produto = est.codigo
LEFT JOIN tblgrupos g ON g.codigo = est.Grupo
LEFT JOIN tblSubGrupos sg ON sg.Codigo = est.SubGrupo
LEFT JOIN tblestoquetamanhos AS tam ON tam.codigo = sc.codigo_tamanho
LEFT JOIN tblsegmentos AS seg ON g.segmento = seg.codigo
LEFT JOIN tblAgrupamentos AS AGR ON AGR.codigo = seg.Agrupamento
WHERE 1 = 1
AND SubCodigo <> 0
AND fe.Padrao = 1
AND est.colecao BETWEEN '2016' AND '2016'
AND qtde.status = 1
AND est.status = 'Ativo'
AND est.grupo = 1
GROUP BY est.Ultima_Compra,
est.precovista,
est.codigo,
est.DescricaoComercial,
est.Custo_Simples,
est.grupo,
est.subgrupo,
est.grupo,
fe.pessoa,
Qtde.SubCodigo,
g.descricao,
g.codigo,
est.codigo,
g.descricao,
sc.descricao,
sg.Descricao,
sg.Codigo,
est.codigomarca,
m.descricao,
tam.codigo,
tam.descricao,
SEG.Codigo,
seg.descricao,
AGR.Codigo,
AGR.Descricao) AS teste
GROUP BY codtam,
agrupamento,
Segmento,
codgrupo,
codsubg,
tamanho) AS tabela
LEFT JOIN tblsegmentos SEGMENTOS ON Segmento = SEGMENTOS.codigo
LEFT JOIN tblAgrupamentos AGRUPAMENTOS ON tabela.Agrupamento = AGRUPAMENTOS.codigo
LEFT JOIN tblGrupos GRUPOS ON tabela.codgrupo = GRUPOS.Codigo
LEFT JOIN tblSubGrupos SUBGRUPOS ON tabela.codsubg = SUBGRUPOS.Codigo
ORDER BY tabela.agrupamento,
tabela.Segmento,
codgrupo,
codsubg,
codtam
COMPUTE SUM(Vendas),
SUM(Qtd),
SUM(compras) BY tabela.agrupamento,
tabela.segmento,
codgrupo,
codsubg,
codTam
Guilher Silva

Guilher Silva

Responder

Post mais votado

04/07/2016

Qual mensagem de erro é gerada ?

Idente o código e utilize a tag "Inserir Código" para colocá-lo novamente no post.

Imaginando que você tem alguma ideia do que esse query faz, fica bem mais fácil te ajudar com o código identado.

Marcos P

Marcos P
Responder

Mais Posts

04/07/2016

Guilher Silva

DECLARE @datainicio AS datetime,
         @datafinal AS datetime
SET @datainicio = '20160530'
SET @datafinal = '20160629'
SELECT tabela.Agrupamento,AGRUPAMENTOS.descricao AS DescAgrupamento,
       tabela.Segmento,SEGMENTOS.descricao AS DescSegmento,
       codgrupo,GRUPOS.Descricao AS DescGrupo,
       codsubg,SUBGRUPOS.Descricao AS DescSubGrupos,
       codtam,
       tamanho,
       Vendas,
       Qtd,
       compras
FROM
  (SELECT agrupamento,
          Segmento,
          codgrupo,
          codsubg,
          codtam,
          tamanho,
          SUM(Vendas) AS Vendas,
          SUM(Qtd) AS Qtd,
          SUM(compras) AS compras
   FROM
     (SELECT DISTINCT (tam.codigo) AS codtam,
  
        (SELECT SUM (IV1.quantidade)
         FROM TblVendidos IV1
         LEFT JOIN tblvendas V1 ON (v1.codigo = iv1.codigo_venda)
         WHERE data_venda BETWEEN @dataInicio AND @dataFinal
           AND IV1.codigo_produto = est.codigo
           AND SubCodigo = Qtde.SubCodigo
           AND v1.Status <> 'Cancelada'
           AND IV1.DEVOLVIDO = 0
           AND IV1.TIPO = 0
           AND (V1.CODTIPO NOT IN(3,
                                  4,
                                  6,
                                  7,
                                  8,
                                  9,
                                  10,
                                  11,
                                  12,
                                  13,
                                  14,
                                  15,
                                  16,
                                  17)
                OR (V1.CODTIPO=15
                    AND v1.CodForma<>0))) AS Vendas,
          
        (SELECT SUM (IV1.quantidade)
         FROM TblVendidos IV1
         LEFT JOIN tblvendas V1 ON (v1.codigo = iv1.codigo_venda)
         WHERE data_venda BETWEEN @dataInicio AND @dataFinal
           AND IV1.codigo_produto = est.codigo
           AND SubCodigo = Qtde.SubCodigo
           AND V1.Status <> 'Cancelada'
           AND IV1.DEVOLVIDO = 0
           AND IV1.TIPO = 0
           AND (V1.CODTIPO NOT IN(3,
                                  4,
                                  6,
                                  7,
                                  8,
                                  9,
                                  10,
                                  11,
                                  12,
                                  13,
                                  14,
                                  15,
                                  16,
                                  17)
                OR (V1.CODTIPO=15
                    AND v1.CodForma<>0))) AS resVenda,
  
        (SELECT prazomedio
         FROM tblcompras
         WHERE sequencia =
             (SELECT max(sequencia_compra)
              FROM tblcompras_itens
              WHERE produto = est.codigo))Prazomedio,

        (SELECT SUM(quantidade)
         FROM tblcompras_itens
         WHERE sequencia =
             (SELECT max(sequencia)
              FROM tblcompras_itens
              WHERE produto = est.codigo)) AS quantidade,

        (SELECT SUM (qtd1.quantidade)
         FROM tblquantidades QTD1
         WHERE produto = est.codigo
           AND qtd1.subcodigo = Qtde.subcodigo)AS Qtd,

        (SELECT SUM (qtd1.quantidade)
         FROM tblquantidades QTD1
         WHERE produto = est.codigo
           AND qtd1.SubCodigo = Qtde.SubCodigo)AS resQuantidade,

        (SELECT SUM(i.quantidade)
         FROM tblcompras_itens AS i
         LEFT JOIN tblCompras AS c ON i.Sequencia_Compra = c.Sequencia
         WHERE (i.Enviado =3
                OR i.enviado =1
                OR i.enviado = 0)
           AND i.Produto = est.Codigo
           AND i.SubCodigo = qtde.subcodigo
           AND c.dataEntrega>'20110212') AS compras,
  /*4*/
        (SELECT SUM(i.quantidade)
         FROM tblcompras_itens AS i
         LEFT JOIN tblCompras AS c ON i.Sequencia_Compra = c.Sequencia
         WHERE (i.Enviado =3
                OR i.enviado =1
                OR i.enviado = 0)
           AND i.Produto = est.Codigo
           AND i.SubCodigo = qtde.subcodigo
           AND c.dataEntrega>'20110212') AS comprasres,
                      est.Ultima_Compra AS UltCompra,
                      tam.descricao AS tamanho,
                      est.precovista AS vrvenda,
                      est.DescricaoComercial material,
                      est.Custo_Simples custo,
                      fe.pessoa,
                      Qtde.SubCodigo,
                      g.descricao descrgrupo,
                      g.codigo codgrupo,
                      g.descricao,
                      sc.descricao subcodigoDEsc,
                      est.codigo,
                      sg.Descricao subgrupo,
                      sg.Codigo codsubg,
                      est.codigomarca,
                      m.descricao AS marca,
                      SEG.Codigo AS Segmento,
                      seg.descricao AS DescSegmento,
                      AGR.Codigo AS Agrupamento,
                      AGR.Descricao AS DescAgrupamento
      FROM tblestoque est
      LEFT JOIN TblQuantidades Qtde ON (qtde.produto = est.codigo)
      LEFT JOIN tblEstoqueSubCodigos SC ON (sc.codigo = qtde.subcodigo)
      LEFT JOIN tblmarcas m ON m.codigo =est.codigomarca
      LEFT JOIN tblfornecest Fe ON fe.produto = est.codigo
      LEFT JOIN tblgrupos g ON g.codigo = est.Grupo
      LEFT JOIN tblSubGrupos sg ON sg.Codigo = est.SubGrupo
      LEFT JOIN tblestoquetamanhos AS tam ON tam.codigo = sc.codigo_tamanho
      LEFT JOIN tblsegmentos AS seg ON g.segmento = seg.codigo
      LEFT JOIN tblAgrupamentos AS AGR ON AGR.codigo = seg.Agrupamento
      WHERE 1 = 1
        AND SubCodigo <> 0
        AND fe.Padrao = 1
        AND est.colecao BETWEEN '2016' AND '2016'
        AND qtde.status = 1
        AND est.status = 'Ativo'
        AND est.grupo = 1
      GROUP BY est.Ultima_Compra,
               est.precovista,
               est.codigo,
               est.DescricaoComercial,
               est.Custo_Simples,
               est.grupo,
               est.subgrupo,
               est.grupo,
               fe.pessoa,
               Qtde.SubCodigo,
               g.descricao,
               g.codigo,
               est.codigo,
               g.descricao,
               sc.descricao,
               sg.Descricao,
               sg.Codigo,
               est.codigomarca,
               m.descricao,
               tam.codigo,
               tam.descricao,
                  SEG.Codigo,
                  seg.descricao,
                  AGR.Codigo,
                  AGR.Descricao) AS teste
   GROUP BY codtam,
            agrupamento,
            Segmento,
            codgrupo,
            codsubg,
            tamanho) AS tabela
LEFT JOIN tblsegmentos SEGMENTOS ON Segmento = SEGMENTOS.codigo
LEFT JOIN tblAgrupamentos AGRUPAMENTOS ON tabela.Agrupamento = AGRUPAMENTOS.codigo
LEFT JOIN tblGrupos GRUPOS ON tabela.codgrupo = GRUPOS.Codigo
LEFT JOIN tblSubGrupos SUBGRUPOS ON tabela.codsubg = SUBGRUPOS.Codigo
ORDER BY tabela.agrupamento,
         tabela.Segmento,
         codgrupo,
         codsubg,
         codtam 
COMPUTE SUM(Vendas), 
  SUM(Qtd),
  SUM(compras) BY tabela.agrupamento,
      tabela.segmento,
      codgrupo,
      codsubg,
      codTam
Responder

04/07/2016

Marcos P

Qual a mensagem de erro gerada ?
Responder

04/07/2016

Cristiane

tenta definir no by do compute, a tabela.nome do campo.
como vc fez com tabela.agrupamento e tabela.segmento

Mas de qualquer forma poste o erro que está dando.
Responder

04/07/2016

Guilher Silva

[img]http://imgur.com/rXs0XUs[/img]

desculpe a demora, sou iniciante no fórum e na área.
obrigado pela ajuda.
Responder

04/07/2016

Marcos P

Desculpe a sinceridade, mas essa query é um lixo !

O uso massivo de subqueries nesse tipo de construção, mata qualquer análise por alguém que não tem a base de dados para testar...

Ok... vamos em frente !

Primeira tentativa, em :

COMPUTE SUM(Vendas), 
  SUM(Qtd),
  SUM(compras) BY tabela.agrupamento,
      tabela.segmento,
      codgrupo,
      codsubg,
      codTam


Tente colocar os alias corretos para cada uma das tabelas que você está se referindo no COMPUTE.

Segunda tentativa, a mensagem gerada ( Incorrect syntax near ''Vendas''. Expecting ''('' or, SELECT ) indica que o interpretador do Sql Server simplesmente se perdeu no meio de tantas subqueries. Faça o simples... elimine tudo que for possível eliminar dessas subqueries e tente entender por que a sintaxe acabou "quebrando". Um bom palpite é que faltou fechar algum parênteses no meio de todas essa confusão. Dê uma olhada no trecho a partir do "/*4*/"... tá especialmente confusa essa parte !

Terceira tentativa, tente substituir essas subqueries por tabelas temporárias... vai ficar mais claro de entender o que esse negócio faz !
( ou deveria fazer... )

Se nada disso funcionar, coloca aqui teu skype / gtalk que eu te chamo quando sobrar um tempo...
Responder

04/07/2016

Guilher Silva

Pode ser sincero sim cara kkk essa query é de um sistema legado então já passou pela mão de um monte de gente, só para você ter ideia não tem uma chave estrangeira nesse banco rs,

agora estou saindo quando voltar deixo contato.
Obrigado irei dar uma analisada nessas questões.
Responder

04/07/2016

Guilher Silva

Marcos P, estava pesquisando e vi que esse comando Compute by não funciona em todas as versões do SQL, você sabe dizer se é um comando esquecido ou até que versão ele funciona ?

obrigado :)
Responder

05/07/2016

Marcos P

Já existe COMPUTE, na versão 2000 do Sql Server...


COMPUTE Clause
Generates totals that appear as additional summary columns at the end of the result set. When used with BY, the COMPUTE clause generates control-breaks and subtotals in the result set. You can specify COMPUTE BY and COMPUTE in the same query.


Sua versão é anterior a essa ?
Responder

05/07/2016

Guilher Silva

Utilizo a versão 2012 e pesquisei melhor e vi que nessa versão esse comando foi descontinuado, estou analisando para utilizar o comando ROLLUP
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar