Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
>
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
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.
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.
O Agrupamento não funciona assim, cada linha "diferente" é agrupada.
Você pode filtrar (com where) para não retornar os registros nulos.
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!
As datas nulas ficam mesmo num agrupamento á parte, qual o problema ?
Como queria ver os dados ?