duvidas em comandos sql
31/10/2012
0
pessoal estou com duvidas em um trabalho q eu tenho q fazer,se alguem puder me ajudar eu agradeceria.são duas tabelas
Totalize por produto a quantidade de produtos vendidos, quantidade de pedidos e qual o valor total vendido.
Totalize por produto a quantidade de produtos vendidos, quantidade de pedidos e qual o valor total vendido.
Leandro Santana
Curtir tópico
+ 0
Responder
Posts
31/10/2012
Claudia Nogueira
Seria mais ou menos isso:
Se você não entender pode postar a estrutura da tabela, que aí fica mais fácil ajudar.
SELECT * FROM clientes WHERE (((tipo_pessoa = 'J') AND (RO = 'SP')) OR ((tipo_pessoa <> 'J') AND (RO <> 'SP')))
Se você não entender pode postar a estrutura da tabela, que aí fica mais fácil ajudar.
Responder
06/11/2012
Alex Lekao
Ola Leandro, boa tarde!!!
Eu utilizo alguns selects aqui que acredito que tenha o que vc quer, para mim esta meio vago a sua solicitacao, como a Claudio mencionou se quiser postar a estrutura da tabela pode ficar mais facil.
O select eh bem grande e bastante pesado, entao nao sei se ficara bom, aqui foi feito por uma necessidade muito especifica entao optamos por correr o risco na perca de desempenho.
Vou postar o codigo abaixo, qqr coisa da um toque, neste codigo uso muita coisa, bem mais ate do que vc precisa, mas acho que tem oque vc precisa.
Segue o codigo:
SELECT
LOJA,
Marca,
CODIGO,
CODFAB,
NOME,
SUM(ESTOQUE)Estoque,
SUM(ISNULL(QTDPCCMP,0)) AS QTDPCCMP,
SUM(ISNULL(QTDPCVDA,0)) AS QTDPCVDA,
SUM(ISNULL(CUSTOVDA,0)) AS CUSTOVDA,
SUM(ISNULL(TOTVDA,0)) AS TOTVDA,
SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(CUSTOVDA,0)) AS MARGEM,
CASE WHEN ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0)),0),0))-1)*100 = -100 THEN 0
ELSE ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0)),0),0))-1)*100
END AS MKP,
SUM(ISNULL(QTDPCDEV,0)) AS QTDPCDEV,
SUM(ISNULL(CUSTODEV,0)) AS CUSTODEV,
SUM(ISNULL(TOTDEV,0)) AS TOTDEV,
SUM(ISNULL(QTDPCVDA,0))-SUM(ISNULL(QTDPCDEV,0)) AS QTDPCVDALIQ,
SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)) AS CUSTOLIQ,
SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)) AS TOTVDALIQ,
(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)))-(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)))
AS MARGEMLIQ,
CASE WHEN ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)),0),0))-1)*100 = -100 THEN 0
ELSE ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)),0),0))-1)*100
END AS MKPLIQ
FROM(
SELECT
E.CODLOJ AS LOJA,
E.Marca,
E.ESTOQUE AS Estoque,
E.CODSTK AS CODIGO,
E.CODFAB,
E.NOME,
(SELECT SUM(I.QTDADE)
FROM REQCOM AS R
LEFT JOIN ITEMCOM AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='RC')
AND(R.CODLOJ IN [DADO8])
AND(I.CODSTK=E.CODSTK)
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
) AS QTDPCCMP,
(SELECT SUM(I.QTDADE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS QTDPCVDA,
(SELECT SUM(I.QTDADE*I.PRCCUE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS CUSTOVDA,
(SELECT SUM(I.TOTLIQ)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS TOTVDA,
(SELECT SUM(I.QTDADE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS QTDPCDEV,
(SELECT SUM(I.QTDADE*I.PRCCUE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS CUSTODEV,
(SELECT SUM(I.TOTLIQ)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK= E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS TOTDEV
FROM ITEMSTK AS E
WHERE(E.TIPOSTK='P')
AND(E.CODLOJ IN [DADO8])
AND(E.MARCA LIKE [DADO3])
) AS REL
GROUP BY LOJA,MARCA,CODIGO,CODFAB,NOME
Eu utilizo alguns selects aqui que acredito que tenha o que vc quer, para mim esta meio vago a sua solicitacao, como a Claudio mencionou se quiser postar a estrutura da tabela pode ficar mais facil.
O select eh bem grande e bastante pesado, entao nao sei se ficara bom, aqui foi feito por uma necessidade muito especifica entao optamos por correr o risco na perca de desempenho.
Vou postar o codigo abaixo, qqr coisa da um toque, neste codigo uso muita coisa, bem mais ate do que vc precisa, mas acho que tem oque vc precisa.
Segue o codigo:
SELECT
LOJA,
Marca,
CODIGO,
CODFAB,
NOME,
SUM(ESTOQUE)Estoque,
SUM(ISNULL(QTDPCCMP,0)) AS QTDPCCMP,
SUM(ISNULL(QTDPCVDA,0)) AS QTDPCVDA,
SUM(ISNULL(CUSTOVDA,0)) AS CUSTOVDA,
SUM(ISNULL(TOTVDA,0)) AS TOTVDA,
SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(CUSTOVDA,0)) AS MARGEM,
CASE WHEN ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0)),0),0))-1)*100 = -100 THEN 0
ELSE ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0)),0),0))-1)*100
END AS MKP,
SUM(ISNULL(QTDPCDEV,0)) AS QTDPCDEV,
SUM(ISNULL(CUSTODEV,0)) AS CUSTODEV,
SUM(ISNULL(TOTDEV,0)) AS TOTDEV,
SUM(ISNULL(QTDPCVDA,0))-SUM(ISNULL(QTDPCDEV,0)) AS QTDPCVDALIQ,
SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)) AS CUSTOLIQ,
SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)) AS TOTVDALIQ,
(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)))-(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)))
AS MARGEMLIQ,
CASE WHEN ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)),0),0))-1)*100 = -100 THEN 0
ELSE ((ISNULL(NULLIF(SUM(ISNULL(TOTVDA,0))-SUM(ISNULL(TOTDEV,0)),0)/NULLIF(SUM(ISNULL(CUSTOVDA,0))-SUM(ISNULL(CUSTODEV,0)),0),0))-1)*100
END AS MKPLIQ
FROM(
SELECT
E.CODLOJ AS LOJA,
E.Marca,
E.ESTOQUE AS Estoque,
E.CODSTK AS CODIGO,
E.CODFAB,
E.NOME,
(SELECT SUM(I.QTDADE)
FROM REQCOM AS R
LEFT JOIN ITEMCOM AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='RC')
AND(R.CODLOJ IN [DADO8])
AND(I.CODSTK=E.CODSTK)
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
) AS QTDPCCMP,
(SELECT SUM(I.QTDADE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS QTDPCVDA,
(SELECT SUM(I.QTDADE*I.PRCCUE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS CUSTOVDA,
(SELECT SUM(I.TOTLIQ)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='VD')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS TOTVDA,
(SELECT SUM(I.QTDADE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS QTDPCDEV,
(SELECT SUM(I.QTDADE*I.PRCCUE)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK=E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS CUSTODEV,
(SELECT SUM(I.TOTLIQ)
FROM REQVDA AS R
LEFT JOIN ITEMVDA AS I ON(I.SID=R.SID)
WHERE(R.TIPOREQ='DV')AND(I.CODSTK= E.CODSTK)
AND(R.CODLOJ IN [DADO8])
AND(R.DATEMI >= [DADO1])
AND(R.DATEMI <= [DADO2])
AND(R.CODVEN = [DADO5])
AND(R.CODCPV NOT IN [DADO6])
) AS TOTDEV
FROM ITEMSTK AS E
WHERE(E.TIPOSTK='P')
AND(E.CODLOJ IN [DADO8])
AND(E.MARCA LIKE [DADO3])
) AS REL
GROUP BY LOJA,MARCA,CODIGO,CODFAB,NOME
Responder
Clique aqui para fazer login e interagir na Comunidade :)