none
forçar o retorno de produtos RRS feed

  • 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                                                                 0

    O 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.nome 

    Obs: eu uso um union pq os resultados podem estar em uma ou em outra tabela.

    quinta-feira, 18 de abril de 2013 20:26

Respostas

Todas as Respostas