Quero no select mas não no group by
Galera, bom dia.
Estou com um "problema". Fiz uma consulta para um relatório, só que ao emitir o relatório ele repete as linhas de acordo a quantidade de meses do relatório. Ex se pesquisar de janeiro a março repete cada item 3x.
Ocorre que na select ele pede para colocar a coluna da data no group by ou usar algum agregador, só que eu não quero por no group by:
Estou com um "problema". Fiz uma consulta para um relatório, só que ao emitir o relatório ele repete as linhas de acordo a quantidade de meses do relatório. Ex se pesquisar de janeiro a março repete cada item 3x.
Ocorre que na select ele pede para colocar a coluna da data no group by ou usar algum agregador, só que eu não quero por no group by:
SELECT distinct(SMK.SMK_NOME) as smk_nome, SUM ( SMM.SMM_QT ) as qtd, SUM ( SMM.SMM_VLR ) as vlr, SUM ( SMM.SMM_AJUSTE_VLR )vlr_ajustado, month(OSM.OSM_DTHR) as mes, year(OSM.OSM_DTHR) as ano FROM smk, osm, smm WHERE ( SMM.SMM_SFAT <> ''C'' ) AND ( OSM.OSM_SERIE = SMM.SMM_OSM_SERIE ) AND ( OSM.OSM_NUM = SMM.SMM_OSM ) AND ( SMK.SMK_TIPO = SMM.SMM_TPCOD ) AND ( SMK.SMK_COD = SMM.SMM_COD ) AND ( SMK.SMK_TIPO = ''S'' ) AND ( (''OJ''=''OJ'') ) AND ( SMM.SMM_COD IN ( :Item_Código ) or ''%'' in ( :Item_Código ) ) AND ( ( OSM.OSM_DTHR >= :Data_Inicio AND OSM.OSM_DTHR < :Data_Fim ) ) GROUP BY (SMK.SMK_NOME), month(OSM.OSM_DTHR), year(OSM.OSM_DTHR) ORDER BY SMK.SMK_NOME
Isnar Filho
Curtidas 0
Respostas
Emerson Nascimento
30/03/2021
quando se usa group by é desnecessário utilizar distinct.
você precisa apresentar mês e ano? se precisar, não vai ter jeito. sempre vai apresentar mais de uma linha.
mas se puder tirar o mês e o ano da lista de campos...
você pode avaliar o uso de PIVOT TABLE para tentar levar tudo pra linha
SELECT SMK.SMK_NOME as smk_nome, SUM ( SMM.SMM_QT ) as qtd, SUM ( SMM.SMM_VLR ) as vlr, SUM ( SMM.SMM_AJUSTE_VLR )vlr_ajustado, month(OSM.OSM_DTHR) as mes, year(OSM.OSM_DTHR) as ano FROM smk, osm, smm WHERE ( SMM.SMM_SFAT <> 'C' ) AND ( OSM.OSM_SERIE = SMM.SMM_OSM_SERIE ) AND ( OSM.OSM_NUM = SMM.SMM_OSM ) AND ( SMK.SMK_TIPO = SMM.SMM_TPCOD ) AND ( SMK.SMK_COD = SMM.SMM_COD ) AND ( SMK.SMK_TIPO = 'S' ) AND ( ('OJ'='OJ') ) AND ( SMM.SMM_COD IN ( :Item_Código ) or '%' in ( :Item_Código ) ) AND ( ( OSM.OSM_DTHR >= :Data_Inicio AND OSM.OSM_DTHR < :Data_Fim ) ) GROUP BY SMK.SMK_NOME, month(OSM.OSM_DTHR), year(OSM.OSM_DTHR) ORDER BY SMK.SMK_NOME
você precisa apresentar mês e ano? se precisar, não vai ter jeito. sempre vai apresentar mais de uma linha.
mas se puder tirar o mês e o ano da lista de campos...
SELECT SMK.SMK_NOME as smk_nome, SUM ( SMM.SMM_QT ) as qtd, SUM ( SMM.SMM_VLR ) as vlr, SUM ( SMM.SMM_AJUSTE_VLR )vlr_ajustado FROM smk, osm, smm WHERE ( SMM.SMM_SFAT <> 'C' ) AND ( OSM.OSM_SERIE = SMM.SMM_OSM_SERIE ) AND ( OSM.OSM_NUM = SMM.SMM_OSM ) AND ( SMK.SMK_TIPO = SMM.SMM_TPCOD ) AND ( SMK.SMK_COD = SMM.SMM_COD ) AND ( SMK.SMK_TIPO = 'S' ) AND ( ('OJ'='OJ') ) AND ( SMM.SMM_COD IN ( :Item_Código ) or '%' in ( :Item_Código ) ) AND ( ( OSM.OSM_DTHR >= :Data_Inicio AND OSM.OSM_DTHR < :Data_Fim ) ) GROUP BY SMK.SMK_NOME ORDER BY SMK.SMK_NOME
você pode avaliar o uso de PIVOT TABLE para tentar levar tudo pra linha
GOSTEI 0
Isnar Filho
30/03/2021
quando se usa group by é desnecessário utilizar distinct.
você precisa apresentar mês e ano? se precisar, não vai ter jeito. sempre vai apresentar mais de uma linha.
mas se puder tirar o mês e o ano da lista de campos...
você pode avaliar o uso de PIVOT TABLE para tentar levar tudo pra linha
SELECT SMK.SMK_NOME as smk_nome, SUM ( SMM.SMM_QT ) as qtd, SUM ( SMM.SMM_VLR ) as vlr, SUM ( SMM.SMM_AJUSTE_VLR )vlr_ajustado, month(OSM.OSM_DTHR) as mes, year(OSM.OSM_DTHR) as ano FROM smk, osm, smm WHERE ( SMM.SMM_SFAT <> 'C' ) AND ( OSM.OSM_SERIE = SMM.SMM_OSM_SERIE ) AND ( OSM.OSM_NUM = SMM.SMM_OSM ) AND ( SMK.SMK_TIPO = SMM.SMM_TPCOD ) AND ( SMK.SMK_COD = SMM.SMM_COD ) AND ( SMK.SMK_TIPO = 'S' ) AND ( ('OJ'='OJ') ) AND ( SMM.SMM_COD IN ( :Item_Código ) or '%' in ( :Item_Código ) ) AND ( ( OSM.OSM_DTHR >= :Data_Inicio AND OSM.OSM_DTHR < :Data_Fim ) ) GROUP BY SMK.SMK_NOME, month(OSM.OSM_DTHR), year(OSM.OSM_DTHR) ORDER BY SMK.SMK_NOME
você precisa apresentar mês e ano? se precisar, não vai ter jeito. sempre vai apresentar mais de uma linha.
mas se puder tirar o mês e o ano da lista de campos...
SELECT SMK.SMK_NOME as smk_nome, SUM ( SMM.SMM_QT ) as qtd, SUM ( SMM.SMM_VLR ) as vlr, SUM ( SMM.SMM_AJUSTE_VLR )vlr_ajustado FROM smk, osm, smm WHERE ( SMM.SMM_SFAT <> 'C' ) AND ( OSM.OSM_SERIE = SMM.SMM_OSM_SERIE ) AND ( OSM.OSM_NUM = SMM.SMM_OSM ) AND ( SMK.SMK_TIPO = SMM.SMM_TPCOD ) AND ( SMK.SMK_COD = SMM.SMM_COD ) AND ( SMK.SMK_TIPO = 'S' ) AND ( ('OJ'='OJ') ) AND ( SMM.SMM_COD IN ( :Item_Código ) or '%' in ( :Item_Código ) ) AND ( ( OSM.OSM_DTHR >= :Data_Inicio AND OSM.OSM_DTHR < :Data_Fim ) ) GROUP BY SMK.SMK_NOME ORDER BY SMK.SMK_NOME
você pode avaliar o uso de PIVOT TABLE para tentar levar tudo pra linha
Ano não é obrigatório, mas mês infelizmente sim. O cerne do relatório é a separação mensal.
GOSTEI 0