Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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)

COLUNAS CALCULADAS ESPERADAS NO SCRIPT SQL ALEM DAS COLUNAS JA EXISTENTES NA TABELA
/monthly_2019_03/image.png.f0d7770b1fba43dcd3cfc7f5a86c7c49.png" />
RESULTADO ESPERADO DO SCRIPT SQL
Obrigado Motta, vou olhar! De qualquer modo, se puders ajudar a montar o script te agradeco. Abs
>
4 horas atrás, Motta disse:
tente usar as funções de analise da Oracle.
https://blogs.oracle.com/oraclemagazine/a-window-into-the-world-of-analytic-functions
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.>
Citar
Falta apenas diminuir as colunas de data
!?
>
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;
tente usar as funções de analise da Oracle.
http://www.orafaq.com/node/55
https://blogs.oracle.com/oraclemagazine/a-window-into-the-world-of-analytic-functions