Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Tom55

[Resolvido] Agrupar dados

Recommended Posts

e ai galera

 

seguinte, tenho uma consulta que varre algumas tabelas e agrupa seus registros iguais.

 

o problema, é que eu não estou conseguindo agrupar alguns registros onde em uma das tabelas algumas datas estão nulas .

 

por exemplo

 

nome	dataEntrada	dataSaida
José	15/05/2005	16/05/2005
José 	  null	           null

 

obviamente não é a minha tabela e nem o resultado, mas é exatamente isso ai que está acontecendo, os demais campos da tabela são iguais, é nas datas que está o problema.

 

já tentei groupby, inner join, left join, full join e até agora nada.

 

alguém tem alguma dica?

Compartilhar este post


Link para o post
Compartilhar em outros sites

As datas nulas ficam mesmo num agrupamento á parte, qual o problema ?

Como queria ver os dados ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

As datas nulas ficam mesmo num agrupamento á parte, qual o problema ?

Como queria ver os dados ?

 

mota, eu gostaria de agrupar elas ao primeiro registro, já que são nulas, pois não tenho a intenção de mostrar esse resultado duplicado.

 

nome    dataEntrada     dataSaida
José    15/05/2005      16/05/2005

 

 

editando...

 

por que disso?

 

pois eu preciso efetuar duas consultas para gerar o resultado, pois uma delas usa duas tabelas para trazer o resultado, mas em alguns casos, o resultado está apenas em uma das tabelas.

 

já usei innerjoin, left, etc... porém, como são umas 4 tabelas que se relacionam, quando tenho o resultado apenas em uma das duas tabelas principais, ele não está mostrando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como elas estão nulas, você pode setar um valor pré-definido ou de acordo com o padrão da tabela que está sendo agrupada com a função coalesce(data, "data_alternativa") e agrupa normalmente por esse campo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

antero

 

não sei se utilizei da forma corretas, mas o fato é que não rolou.

 

enfim, mais fácil eu explicar mostrando a query certa...

 

select eapagrup, ItemEAP, TAG, idEtapa, COALESCE(DtExe, '') as DtExe, COALESCE(DtInfo, '') as DtInfo, 
COALESCE(DtAprov, '') as DtAprov, 
COALESCE(DtCancel, '') as DtCancel,  DtPrevista, DtExe_BAIXA, 
DtProgramacao,
CredDeb, DtMedicao, DtDocCQ 
from(
Select distinct e.eapagrup, e.eapEtapa as ItemEAP, dtp.TAG, a.idEtapa,
COALESCE(a.DtExe, Convert(VARCHAR, Case When a.dtexe = '1900-01-01' Then null  else a.Dtexe end,103)) as DtExe,
COALESCE(a.DtInfo, Convert(VARCHAR, Case When a.DtInfo = '1900-01-01' Then null else a.DtInfo end,103)) as DtInfo,
COALESCE(a.DtAprov, Convert(VARCHAR, Case When a.DtAprov = '1900-01-01' Then null else a.DtAprov end,103)) as DtAprov,
COALESCE(a.DtCancel, Convert(VARCHAR, Case When a.DtCancel = '1900-01-01' Then null else a.DtCancel end,103)) as DtCancel,
Convert(VARCHAR, Case When dtp.DtPrevista = '1900-01-01' then null else dtp.DtPrevista end, 103) as DtPrevista,
Convert(VARCHAR, Case When dtp.dtexe = '1900-01-01' Then null  else dtp.Dtexe end,103) as DtExe_BAIXA,
Convert(VARCHAR, Case When dtp.DtProgramacao = '1900-01-01' Then null  else dtp.DtProgramacao end,103) as DtProgramacao,
Convert(VARCHAR, Case When dtp.DtPlano = '1900-01-01' then null else dtp.DtPlano end, 103) as DtPlano, dtp.CredDeb,
Convert(VARCHAR, Case When dtp.DtMedicao = '1900-01-01' then null else dtp.DtMedicao end, 3) as DtMedicao, 
   Convert(VARCHAR, Case When dtp.DtDocCQ = '1900-01-01' then null else dtp.DtDocCQ end, 3) as DtDocCQ 
FROM equivalencia e, componente c, DataPrevista dtp, avanco a
where dtp.eapEtapa = e.eapEtapa 
and a.tag = dtp.tag
and a.idEtapa = e.etpID
and C.idCaracteristica = e.Caracteristica
and dtp.Tag = 'MC-0001'
AND dtp.eapEtapa = '2.5.1.1'
UNION ALL
Select distinct e.eapagrup, e.eapEtapa as ItemEAP, dtp.TAG, e.etpId,
null as DtExe,
null as DtInfo,
null as DtAprov,
null as DtCancel,
Convert(VARCHAR, Case When dtp.DtPrevista = '1900-01-01' then null else dtp.DtPrevista end, 103) as DtPrevista,
Convert(VARCHAR, Case When dtp.dtexe = '1900-01-01' Then null  else dtp.Dtexe end,103) as DtExe_BAIXA,
Convert(VARCHAR, Case When dtp.DtProgramacao = '1900-01-01' Then null  else dtp.DtProgramacao end,103) as DtProgramacao,
Convert(VARCHAR, Case When dtp.DtPlano = '1900-01-01' then null else dtp.DtPlano end, 103) as DtPlano, dtp.CredDeb,
Convert(VARCHAR, Case When dtp.DtMedicao = '1900-01-01' then null else dtp.DtMedicao end, 3) as DtMedicao, 
   Convert(VARCHAR, Case When dtp.DtDocCQ = '1900-01-01' then null else dtp.DtDocCQ end, 3) as DtDocCQ 
FROM equivalencia e, DataPrevista dtp 
where dtp.eapEtapa = e.eapEtapa 
and dtp.Tag = 'MC-0001'
AND dtp.eapEtapa = '2.5.1.1'
)utc
group by eapagrup, ItemEAP, TAG, idEtapa, DtExe, DtInfo, DtAprov, DtCancel, DtPrevista, DtExe_BAIXA, DtProgramacao,
CredDeb, DtMedicao, DtDocCQ 

 

as consultas são bem parecidas, mas existem alguns resultados que só tenho na tabela de dataprevista.

 

o resultado que a consulta acima me mostra é:

 

2.5.1	2.5.1.1	MC-0001	498187	2011-09-23 00:00:00.000	2011-09-23 00:00:00.000	2011-09-26 00:00:00.000	1900-01-01 00:00:00.000	25/09/2011	23/09/2011	NULL	C         	25/09/11	NULL
2.5.1	2.5.1.1	MC-0001	498187	1900-01-01 00:00:00.000	1900-01-01 00:00:00.000	1900-01-01 00:00:00.000	1900-01-01 00:00:00.000	25/09/2011	23/09/2011	NULL	C         	25/09/11	NULL

 

e o ideal é que ele me mostrasse.

 

2.5.1	2.5.1.1	MC-0001	498187	2011-09-23 00:00:00.000	2011-09-23 00:00:00.000	2011-09-26 00:00:00.000	1900-01-01 00:00:00.000	25/09/2011	23/09/2011	NULL	C         	25/09/11	NULL

 

vale lembrar que eu já tentei fazer isso usando join, mas não resolveu para os casos em que ele acaba por buscar só encontra os dados na segunda coluna.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Agrupamento não funciona assim, cada linha "diferente" é agrupada.

 

Você pode filtrar (com where) para não retornar os registros nulos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

posso fazer esse filtro sim, resolve em 90% dos casos, pois dependendo da situação ele some outra informação e fico na mão denovo.

 

pode marcar como resolvido!

 

ao invés de travar os nulos, usei uma busca com not in e agora está trazendo 100% correto

 

obrigado pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.