none
Problemas com Union RRS feed

  • Pergunta

  • Boa tarde

    Sou meio novo com SQL Server e estou precisando e uma ajuda

    Tenho um join que retorna valores semelhantes, porém por meio de uma clausula where que juntar os resultados de duas colulas da tabela hi com duas colunas da tabela hr na mesma linha (elas são de linhas diferentes e tem dados diferentes), para isso na primeira condição o resultset teria de ser null na tabela hi e o segundo resultset teria de ser null na tabela hr

    Teria alguma forma de fazer isso ? Ou teria outra forma de eu juntar essa linhas ?

    SELECT agt.age_id,loc.loc_id,agt.age_integrationid,agt.age_name,loc.loc_integrationid,loc.loc_description,loc.loc_neighborhood,
    loc.ds_EnderecoCompostoSU,loc.ds_TipoOrdemServico,loc.ds_TipoProprio,loc.nm_Local,loc.qt_Area,hi.hty_id,
    hi.cp_DataInicioServico ,hi.cp_HoraInicioServico ,
    hr.cp_DataTerminoServico ,hr.cp_HoraTerminoServico -- tem de retornar null
    --hr.cp_ConfirmaProprio
    from [dbo].[tmpTask] as tsk 
    	INNER JOIN [dbo].[tmpAgent]  as agt on tsk.age_id = agt.age_id
    	INNER JOIN [dbo].[tmpPIVOT_Local] as loc on tsk.loc_id = loc.loc_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraInicial] as hi on tsk.tsk_id = hi.tsk_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraFinal] as hr on tsk.tsk_id = hr.tsk_id
    	where cp_ConfirmaProprio LIKE 'NÃO'
    
    Union
    
    SELECT agt.age_id,loc.loc_id,agt.age_integrationid,agt.age_name,loc.loc_integrationid,loc.loc_description,loc.loc_neighborhood,
    loc.ds_EnderecoCompostoSU,loc.ds_TipoOrdemServico,loc.ds_TipoProprio,loc.nm_Local,loc.qt_Area,hi.hty_id,
    hi.cp_DataInicioServico,hi.cp_HoraInicioServico, -- tem de retornar null
    hr.cp_DataTerminoServico,hr.cp_HoraTerminoServico 
    --hr.cp_ConfirmaProprio
    from [dbo].[tmpTask] as tsk 
    	INNER JOIN [dbo].[tmpAgent]  as agt on tsk.age_id = agt.age_id
    	INNER JOIN [dbo].[tmpPIVOT_Local] as loc on tsk.loc_id = loc.loc_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraInicial] as hi on tsk.tsk_id = hi.tsk_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraFinal] as hr on tsk.tsk_id = hr.tsk_id
    	where cp_ConfirmaProprio LIKE 'SIM'

    segunda-feira, 10 de abril de 2017 21:17

Respostas

Todas as Respostas

  • Deleted
    segunda-feira, 10 de abril de 2017 22:45
  • Obrigado pela resposta José

    Fiz uma alteração no código 

    SELECT agt.age_id, loc.loc_id, agt.age_integrationid, agt.age_name, loc.loc_integrationid,
           loc.loc_description, loc.loc_neighborhood, loc.ds_EnderecoCompostoSU, 
           loc.ds_TipoOrdemServico, loc.ds_TipoProprio, loc.nm_Local, loc.qt_Area, hi.hty_id,
            hi.cp_DataInicioServico,hi.cp_HoraInicioServico,
           case when cp_ConfirmaProprio = 'NÃO' 
                then NULL 
                 else hr.cp_DataTerminoServico end as cp_DataTerminoServico,
           case when cp_ConfirmaProprio = 'NÃO'
                then NULL 
                else hr.cp_HoraTerminoServico end as cp_HoraTerminoServico
      from [dbo].[tmpTask] as tsk 
    	INNER JOIN [dbo].[tmpAgent]  as agt on tsk.age_id = agt.age_id
    	INNER JOIN [dbo].[tmpPIVOT_Local] as loc on tsk.loc_id = loc.loc_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraInicial] as hi on tsk.tsk_id = hi.tsk_id
    	INNER JOIN [dbo].[tmpPIVOT_at_DataHoraFinal] as hr on tsk.tsk_id = hr.tsk_id

    Preciso agora juntar dois resultados

    218683 17309255 18 EQUIPE 18 857 2PLA0036 - CAMPO DE FUTEBOL - BRASILIA PLANALTO ONEDA ROTEIRO NORMAL CAMPO DE FUTEBOL BRASILIA 10125.5 44769955 2016-06-02 14:26 NULL NULL
    218683 17309255 18 EQUIPE 18 857 2PLA0036 - CAMPO DE FUTEBOL - BRASILIA PLANALTO ONEDA ROTEIRO NORMAL CAMPO DE FUTEBOL BRASILIA 10125.5 44842893 2016-06-03 07:12 2016-06-03 10:33

    Nesse eu teria que unir o campo hi.cp_DataInicioServico,hi.cp_HoraInicioServico da primeira linha com o cp_DataTerminoServico,cp_HoraTerminoServico
    terça-feira, 11 de abril de 2017 18:03
  • Deleted
    terça-feira, 11 de abril de 2017 19:04