Jump to content

Recommended Posts

Prezados, boa noite!

 

Me deparei com um problema aqui que acredito que seja bem simples para voces. Estou aqui precisando agrupar dados com a maior data de vendas para um cliente Numa coluna para todas as linhas do cliente (registro a registro das notas). Tambem preciso fazer algumas operacoes de total para disponibilizar um SCRIPT SQL sql para ser consumido por uma ferramenta analitica de BI e foi especificado exatamente como esta na planilha. Para facilitar criei os cenários. Tem os scripts de criacao da tabela e de insert e os resultados esperados nas colunas calculadas pelo sql. Espero que a documentação esteja boa para o caso de uso e que voces possam me ajudar. POde ser didatico para quem da aulas de PL SQL.

 

Grato

 

Att

Paulo

 

PS: como nao aceitou a planilha, escrevo abaixo:

 

--SCRIPT DE CRIACAO TABELA ORACLE
CREATE TABLE T_VENDAS
  (DATA_VENDA DATE,
  COD_CLI NUMBER (10),
  CLIENTE VARCHAR2(10),
  NUM_NF VARCHAR(10),
  ITEM VARCHAR2(20),
  QTDE NUMBER (10,2),
  VL_TOT_ITEM NUMBER (10,2),
  VL_UNIT NUMBER (10,2));
--INSERTS

INSERT INTO T_VENDAS VALUES('05-Jan-2019',15,'JOAO','20','MESA',1,200,200);
INSERT INTO T_VENDAS VALUES('05-Jan-2019',15,'JOAO','20','CADEIRA',4,240,60);
INSERT INTO T_VENDAS VALUES('21-Jan-2019',15,'JOAO','66','BANCO',2,240,120);
INSERT INTO T_VENDAS VALUES('08-Feb-2019',15,'JOAO','102','GELADEIRA',1,600,600);
INSERT INTO T_VENDAS VALUES('07-Mar-2019',15,'JOAO','145','ARMARIO',1,450,450);
INSERT INTO T_VENDAS VALUES('05-Jan-2019',20,'MARIA','28','SOFA',1,750,750);
INSERT INTO T_VENDAS VALUES('05-Jan-2019',20,'MARIA','28','TAPETE',2,280,140);
INSERT INTO T_VENDAS VALUES('21-Jan-2019',20,'MARIA','72','CORTINA',2,160,80);
INSERT INTO T_VENDAS VALUES('08-Feb-2019',20,'MARIA','120','CAMA',1,400,400);
INSERT INTO T_VENDAS VALUES('17-Feb-2019',20,'MARIA','151','COLCHAO',1,500,500);

 

 

CENARIOS (DADOS INSERIDOS NA TABELA T_VENDAS - COLUNAS DO EXCEL ABAIXO: B, C, D, E, F, G, H, I)

 

image.thumb.png.bed0351877b13f2290b0df1ee80a7a1b.png

 

COLUNAS CALCULADAS ESPERADAS NO SCRIPT SQL ALEM DAS COLUNAS JA EXISTENTES NA TABELA

 

image.png.f0d7770b1fba43dcd3cfc7f5a86c7c49.png

 

RESULTADO ESPERADO DO SCRIPT SQL

 

image.thumb.png.659de18f9bab15fa8a4b3d85b64c3a4f.png

 

 

 

   

Share this post


Link to post
Share on other sites

Obrigado Motta, vou olhar! De qualquer modo, se puders ajudar a montar o script te agradeco. Abs

Share this post


Link to post
Share on other sites
4 horas atrás, Motta disse:

 Oi Motta, agradeço imensamente as dicas. Fiz o dever de casa e o script funcionou para as colunas que eu queria agrupar valores por cliente, max da data, etc. Falta apenas diminuir as colunas de data....

 

o script ficou assim:

SELECT
    Trunc(DATA_VENDA) AS "DATA VENDA",
    COD_CLI,
    CLIENTE,
    NUM_NF,
    ITEM,
    QTDE,
    VL_TOT_ITEM,
    VL_UNIT,
    Trunc(SYSDATE) AS "DATA_ATUAL",
    Sum(VL_TOT_ITEM) OVER (PARTITION BY COD_CLI) AS "VL_TOT_CLIENTE",
    MAX(Trunc(DATA_VENDA)) OVER (PARTITION BY COD_CLI) AS "DATA ULT COMPRA",
    COUNT(*) AS "QTDE REG"
FROM T_VENDAS
GROUP BY   
  Trunc(DATA_VENDA),
    COD_CLI,
    CLIENTE,
    NUM_NF,
    ITEM,
    QTDE,
    VL_TOT_ITEM,
    VL_UNIT;

 

 

Grato pela ajuda e pelo trabalho aqui nesse forum.

Share this post


Link to post
Share on other sites
Citar

Falta apenas diminuir as colunas de data

 

 

!?

Share this post


Link to post
Share on other sites
5 horas atrás, Motta disse:

 

 

!?

script final ficou assim:

SELECT
    TRUNC(DATA_VENDA) AS "DATA VENDA",
    COD_CLI,
    CLIENTE,
    NUM_NF,
    ITEM,
    QTDE,
    VL_TOT_ITEM,
    VL_UNIT,
    TRUNC(SYSDATE) AS "DATA_ATUAL",
    SUM(VL_TOT_ITEM) OVER (PARTITION BY COD_CLI) AS "VL_TOT_CLIENTE",
    MAX(TRUNC(DATA_VENDA)) OVER (PARTITION BY COD_CLI) AS "DATA ULT COMPRA",
    TRUNC(SYSDATE)-TRUNC(DATA_VENDA) AS "DIF DIAS EMISSAO E DATA ATUAL",
    TRUNC(SYSDATE)-MAX(TRUNC(DATA_VENDA)) OVER (PARTITION BY COD_CLI) AS "DIAS SEM COMPRA",
    COUNT(*) AS "QTDE REG"
FROM T_VENDAS
GROUP BY   
    TRUNC(DATA_VENDA),
    COD_CLI,
    CLIENTE,
    NUM_NF,
    ITEM,
    QTDE,
    VL_TOT_ITEM,
    VL_UNIT;

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Rodrigo5468
      Olá a todos(as), boa tarde!
       
      Tenho uma Query e um pequeno código em PHP para mostrar os resultados em uma tabela, mas estão repetindo os resultados da Query. Gostaria de uma solução, ou uma gambiarra para isso.
      Query
      SELECT DISTINCT b.ID AS "ID", b.Character AS "Personagem", b.Money AS "DinMao", b.BankMoney AS "DinBanco", b.Savings2 AS "DinPoupa", c.houseOwner AS "IDono", SUM(c.houseMoney) AS "DinCasa" FROM characters b INNER JOIN houses c ON (b.ID = c.houseOwner) ORDER BY ((b.Money+b.BankMoney+b.Savings2+c.houseMoney)) DESC LIMIT 0, 1000 PHP
      if(mysqli_num_rows($q) > 0) { while($r = $q->fetch_assoc()) { //Código da Tabela } }  
      Observação:
      Quando eu removo a seguinte parte da minha Query que é: SUM(c.houseMoney) AS "DinCasa" e deixo assim: c.houseMoney AS "DinCasa"
      Os dados da minha tabela repetem, não sei o motivo e/ou a circunstância disso. Mas peço a ajuda de vocês para solucionar. Vale ressaltar que (ID e houseOwner) tem os mesmos valores, só o valor da casa que recebe o valor do ID, e ele pode ter quantas casa ele quiser, e se ele tiver cinco casas, mostrará o resultado cinco resultados na minha tabela, como posso resolver isso?
       
       
      Meu muito obrigado desde já.
    • By eduardo_barros
      Boa tarde,
       
      Possuo uma aplicação rodando em Laravel com Db Mysql.
       
      Porem um cliente solicitou que o nosso sistema ficasse gravando informações no banco de dados SQL deles e vice e versa, só que o sistema deles não tem API, nesse caso vamos executar as queries do banco banco deles do nosso lado lendo e escrevendo, como funciona essa multiconexão de bancos dentro do laravel?
    • By thiago009
      Sou novato na área, estou criando um site para praticar, o meu problema está na página contatos. O objetivo é que ele salve os dados do formulário num arquivo do access. Sei que não é o ideal, como estou começando na área, acho que é melhor aprender assim para depois estudar outras formas.
      Criei um comando no SQL que intitulei de "grava", o nome do meu arquivo do access é "banco" e o html é contato.
      Tentei também validar os campos com java, mas não deu certo e exclui os códigos que tinha colocado no início do html, se alguém puder me ajudar a fazer a validação.
      Isso não é um trabalho, estou fazendo para aprender.

      Segue link com os arquivos:
      https://etecspgov-my.sharepoint.com/:f:/g/personal/thiago_cunha35_etec_sp_gov_br/EioK0B6ZHaNNlJ6zZWSXSfUB7PwxWfp-R5ulmqZOr1Hlpg?e=v51d7i
       
       
      Agradeço quem puder ajudar,
       

      Muito Obrigado.
    • By Robson Barros da Rocha
      Bom dia povo. Tenho um problema, e não uma dúvida. Eu executo no SQL Server esta query para agrupar os resultados cujo tenha o código do comprovante repetido:
      SELECT * FROM SHOP_Pedidos WHERE show='1' GROUP BY comprovante As colunas são:
      ID = Se preenche automaticamente
      comprovante = Recebe o código do comprovante
      productName = Nome do produto
      productValue = Valor do produto
      dateSent = Data que o produto foi enviado
      show = Enviado (1) e não enviado (0)
       
      A query que mostrei acima, não retorna dados porque aparece esse erro: "Column 'SHOP_Pedidos.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause." Certo, então aí que está o problema. Vendo o erro, eu troquei a * pela coluna comprovante, e resultou, mas a consulta só retorna a coluna comprovante (por conta do SELECT estar especificando somente ele. 
       
      A dúvida é: Tem como recuperar todos as colunas, assim como mysql?
    • By Pedro Vinicius Miguel Dias
      Pessoal, estou estudando o Banco de Dados Oracle e estou tendo um problema pra criar uma nova conexão.
      Durante o curso, o instrutor pede que eu crie duas conexoes, a TESTE com a senha: teste e a PRATICA com a senha :pratica... cada uma com uma senha e etc e elas funcionam.
      Eu por minha conta quis criar outra conexão com outro nome e outra senha, Ex. (User TESTE2 e senha: teste2) e ao testar, o Banco não conecta. Erro ORA-01017.
       
      Alguém consegue me ajudar?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.