-
Total de itens
43 -
Registro em
-
Última visita
Tudo que Thiago Btos postou
-
Bom dia pessoal. Estou com uma dúvida na estruturação do select. Tenho um relatório que está extraindo já informações corretamente, com base no período gerado (inicial e final) Exemplo de como está hoje: SELECT D.CATEGORIA, SUM(D.VALOR) AS VALOR_VENDA, D.DATA AS (MES_ANO) FROM DUAL D WHERE D.DATA BETWEEN '20210501' AND '20210731' GROUP BY D.CATEGORIA, D.DATA Retornando: Categoria | Valor_venda | Mes_Ano 1 | 1000,00 | 05/2021 1 | 2000,00 | 06/2021 1 | 800,00 | 07/2021 2 | 500,00 | 05/2021 2 | 200,00 | 07/2021 2 | 700,00 | 06/2021 Até ai está tranquilo. Porém foi solicitado para adicionar uma coluna YTD (Year to data - acumulado do ano) agrupando o valor total da venda do ano do filtro. Então se foi colocado uma data do período Jan/2020 a Mar/2020, essa nova coluna tem que pegar as vendas do ano inteiro de 2020 E precisa me retornar assim: Categoria | Valor_venda | Mes_Ano | YTD 1 | 1000,00 | 05/2021 | 15000,00 1 | 2000,00 | 06/2021 | 15000,00 1 | 800,00 | 07/2021 | 15000,00 2 | 500,00 | 05/2021 | 8000,00 2 | 200,00 | 07/2021 | 8000,00 2 | 700,00 | 06/2021 | 8000,00 (Os valores de 15000 e 8000 seria a soma do ano inteiro) O que consegui pensar seria um subselect que tem o where com data do ano, porém nesse caso retorno mais de um resultado no subselect, não dando para usar... Qual seria a alternativa que tenho?
-
Motta bom dia. Eu tentei usar o over, se fosse para o mesmo periodo do filtro que está no where, daria certo. Mas preciso ter um outro periodo (ano) nessa coluna YTD, é onde está o meu problema
-
Boa tarde pessoal. Estou travado em uma parte do select do qual preciso somar os valores de todos os registros da coluna, e usa-lo como base de calculo para outra coluna SELECT PRODUTO, HORAS, QTDE, VARIACAO FROM DUAL Meu select está retornando algo assim: PRODUTO | HORAS | QTDE | VARIACAO A | 2 | 20 | 5 B | 6 | 25 | 3 C | 5 | 70 | 9 D | 8 | 30 | 2 -------------------------------------------------------- Total | 21 | 145 | Preciso criar uma nova coluna com a formula (Total Qtde / Total horas) * variação ficando assim: PRODUTO | HORAS | QTDE | VARIACAO | CONTA A | 2 | 20 | 5 | 34.52 B | 6 | 25 | 3 | 20.71 C | 5 | 70 | 9 | 62.14 D | 8 | 30 | 2 | 13.80 A forma que estou tentando fazer é via subselect, mas ele não agrupa todas as linhas, e somente o registro da linha atual. SELECT PRODUTO, HORAS, QTDE, VARIACAO, (SELECT (SUM(QTDE) / SUM(HORAS)) * VARIACAO) AS CONTA FROM DUAL Dessa forma me retorna o seguinte resultado, como se estive calculando somente a linha atual e não toda a coluna. PRODUTO | HORAS | QTDE | VARIACAO | CONTA A | 2 | 20 | 5 | 50 B | 6 | 25 | 3 | 12.5 C | 5 | 70 | 9 | 126 D | 8 | 30 | 2 | 7.5 Espero que eu tenha conseguido explicar minha necessidade de forma que de para entender.
- 4 respostas
-
[Resolvido] Select usar soma de coluna em nova coluna
Thiago Btos respondeu ao tópico de Thiago Btos em Oracle
Obrigado Motta, com o sum over deu certo. Essa função realmente não conhecida. Obg novamente pelo auxílio.- 4 respostas
-
[Resolvido] Select usar soma de coluna em nova coluna
Thiago Btos respondeu ao tópico de Thiago Btos em Oracle
Boa tarde Motta. Isso mesmo, o total acumulado das colunas horas e qtde. (145/21)*5 =34.52 (145/21)*3=20.71 E assim vai.- 4 respostas
-
Boa tarde galera. Fiz um select que tras 4 informações do banco (matricula, nome, data e hora) SELECT QD1_MAT, RA_NOME, QD1_DTBAIX AS DATA, QD1_HRBAIX FROM QD1010 QD1 INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*' ORDER BY QD1_DTBAIX, QD1_HRBAIX Retornando os seguintes registros: Preciso retornar somente as linhas em amarelo, que seria a seguinte condição. Caso tiver alguma matricula igual, trazer somente o registro com a maior data, junto com seu respectivo horário. O mais próximo que consegui chegar foi utilizando o MAX para data e hora, e agrupando o restante dos campos. SELECT QD1_MAT,RA_NOME,MAX(DATA), MAX(QD1_HRBAIX) FROM ( SELECT QD1_MAT, RA_NOME, QD1_DTBAIX AS DATA, QD1_HRBAIX FROM QD1010 QD1 INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*' ) GROUP BY QD1_MAT,RA_NOME Porém na hora ele não pega o valor correspondente e sim o valor máximo. Ai estou travado nessa parte, como faço para trazer a hora corresponde sem o restante dos registros?
-
Obrigado Motta pela sugestão, mas acabou retornou um outro resultado. Fiz um ajuste no meu código e ficou assim, onde concatenei data com hora e posteriormente usei o max, trazendo um único registro: SELECT QD1_MAT,RA_NOME,MAX(DT_BAIXA) AS DT_BAIXA FROM ( SELECT QD1_MAT, RA_NOME, QD1_DTBAIX||' '||QD1_HRBAIX AS DT_BAIXA FROM QD1010 QD1 INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*' WHERE QD1.D_E_L_E_T_ <> '*' ORDER BY QD1_DTBAIX, QD1_HRBAIX) GROUP BY QD1_MAT,RA_NOME