Usuário com melhor resposta
forçar o retorno de produtos

Pergunta
-
Tenho uma view que deve pegar o total de apolices existentes em todos os meses do sistema
Ela está funcionando bem e trazendo os resultados corretamente.
Porém gostaria que os resultados aparecessem para os 4 produtos independente de ter ou não apolices (caso não tenha, apareça zerado)
Exemplo:
contrato produto total apolices
2524 109 - produto 1 19430
2439 111 - produto 2 6075
2532 116 - produto 3 126
2533 1188 - produto 4 0O usuário terá uma coluna onde tem o mês e o ano para que traga os resultados do mês selecionado
Porém em determinados meses, quando não tem apolices para o produto, o sql simplesmente ignora e não mostra o resultado.
Tem como preencher sempre os 4 produtos (se tiver apolices, a quantidade e se não, com zero)?
vai o código:
CREATE
VIEW V_TAB1
AS
select [ref] =
case
when len(cast(month(apo.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(apo.dt_inicio_vigencia) as varchar(4))) = 6
then '0' + cast(month(apo.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(apo.dt_inicio_vigencia) as varchar(4))
else cast(month(apo.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(apo.dt_inicio_vigencia) as varchar(4))
end
, [mes] = datepart(mm,apo.dt_inicio_vigencia)
, [ano] = datepart(yyyy,apo.dt_inicio_vigencia)
, [contrato] =
case pro.produto_id
when '1' then '2524'
when '2' then '2439'
when '3' then '2532'
when '4' then '2533'
end
, [produto] = cast(pro.produto_id as varchar(4)) + ' - ' + pro.nome
, [total apolices] = isnull(count(apo.apolice_id),0)
from produto pro
join proposta ppt
on pro.produto_id = ppt.produto_id
left join fechada pfe
on ppt.proposta_id = pfe.proposta_id
left join apolice apo
on pfe.proposta_id = apo.proposta_id
where pro.produto_id in ('1','2','3','4')
and datepart(mm,apo.dt_inicio_vigencia) is not null
and datepart(yyyy,apo.dt_inicio_vigencia) is not null
group by datepart(mm,apo.dt_inicio_vigencia), datepart(yyyy,apo.dt_inicio_vigencia), pro.produto_id, pro.nome
union
select [ref] =
case
when len(cast(month(pad.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(pad.dt_inicio_vigencia) as varchar(4))) = 6
then '0' + cast(month(pad.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(pad.dt_inicio_vigencia) as varchar(4))
else cast(month(pad.dt_inicio_vigencia) as varchar(2)) + '/' + cast(year(pad.dt_inicio_vigencia) as varchar(4))
end
, [mes] = datepart(mm,pad.dt_inicio_vigencia)
, [ano] = datepart(yyyy,pad.dt_inicio_vigencia)
, [contrato] =
case pro.produto_id
when '1' then '2524'
when '2' then '2439'
when '3' then '2532'
when '4' then '2533'
end
, [produto] = cast(pro.produto_id as varchar(4)) + ' - ' + pro.nome
, [total apolices] = isnull(count(pad.apolice_id),0)
from produto pro
join proposta ppt
on pro.produto_id = ppt.produto_id
left join adesao_tb pad
on ppt.proposta_id = pad.proposta_id
where pro.produto_id in ('1','2','3','4')
and datepart(mm,pad.dt_inicio_vigencia) is not null
and datepart(yyyy,pad.dt_inicio_vigencia) is not null
group by datepart(mm,pad.dt_inicio_vigencia), datepart(yyyy,pad.dt_inicio_vigencia), pro.produto_id, pro.nomeObs: eu uso um union pq os resultados podem estar em uma ou em outra tabela.
Respostas
-
Deleted
- Marcado como Resposta Fernando.Jarcen terça-feira, 7 de maio de 2013 12:42
Todas as Respostas
-
-
-
-
infelizmente esse código continua emitindo o msm resultado.
Tem o seguinte erro:
Msg 8120, Level 16, State 1, Line 8
Column 'apolice.dt_inicio_vigencia' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.ai quando eu retiro a primeira coluna, ele retorna os dados mas apenas os não-zerados.
-
-
Deleted
- Marcado como Resposta Fernando.Jarcen terça-feira, 7 de maio de 2013 12:42
-