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_NOMEvocê 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_NOMEvocê 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_NOMEvocê 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_NOMEvocê 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