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
@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
Post mais votado
04/07/2016
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
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
04/07/2016
Cristiane
como vc fez com tabela.agrupamento e tabela.segmento
Mas de qualquer forma poste o erro que está dando.
04/07/2016
Guilher Silva
desculpe a demora, sou iniciante no fórum e na área.
obrigado pela ajuda.
04/07/2016
Marcos P
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...
04/07/2016
Guilher Silva
agora estou saindo quando voltar deixo contato.
Obrigado irei dar uma analisada nessas questões.
04/07/2016
Guilher Silva
obrigado :)
05/07/2016
Marcos P
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 ?
05/07/2016
Guilher Silva
Clique aqui para fazer login e interagir na Comunidade :)