Ir para conteúdo

Arquivado

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

Alexandre Luccia

[Resolvido] Select UNION ALL com ORDER BY

Recommended Posts

Preciso ordernar pelo campo, a.dt_transferencia, mas não consigo, alguém pode me ajudar?

 

Tks

USE [EvolutionGR]
GO
/****** Object:  StoredProcedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico]    Script Date: 05/16/2012 15:50:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico](@dt_movto_de  datetime      = NULL,
                                                             @dt_movto_ate datetime      = NULL,
                                                             @id_externo   int           = NULL,
                                                             @nr_conta     numeric(20,0) = NULL,
                                                             @tp_natureza  char(1)       = NULL)
As
Begin

Set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
Select '<root>'
Union all
(Select '<registro>'         +
       '<id_externo>'       + cast(a.id_externo as varchar(10))                              + '</id_externo>' +
       '<ds_abreviado>'     + isnull(rtrim(c.ds_abreviado), '')                              + '</ds_abreviado>'  +
       '<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103)                     + '</dt_transferencia>' +
       '<nr_conta_origem>'  + cast(a.nr_conta_origem as varchar(20))                         + '</nr_conta_origem>' +
       '<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20))                        + '</nr_conta_destino>' +
       '<tp_natureza>'      + isnull(a.tp_natureza, '')                                      + '</tp_natureza>' +
       '<tp_conta>'         + isnull(b.tp_conta, '')                                         + '</tp_conta>' +
       '<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
       '<ds_historico>'     + isnull(ds_historico, '')                                       + '</ds_historico>' +
	   '</registro>'
 From  gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
  join gr_tb_mesa_empresas_renda_fixa_contas    b (nolock) on b.nr_conta = a.nr_conta_origem
  join gr_tb_mesa_empresas_renda_fixa           c (nolock) on c.id_externo = b.id_externo
 Where (a.dt_transferencia >= @dt_movto_de  or @dt_movto_de  is null)
   and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
   and (a.id_externo        = @id_externo   or @id_externo   is null)
   and (a.nr_conta_origem   = @nr_conta     or @nr_conta     is null)
   and (a.tp_natureza       = @tp_natureza  or @tp_natureza  is null))
 Union all
 Select '</root>'
End

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou ter explicar do meu jeito você pega a ideia e aplica em seu command...

 

valeu

KUROL3

 

select * from (
(

select 
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela

)unnion all(

select 
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela


) unnion all(

select 
'meu campo ' as meu_campo,
'campo data sql' as minha_data
from
tabela

)) as b order by b.minha_data ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim

 

...
Select '<root>'
Union all
select t.registro from (Select '<registro>'         +
       '<id_externo>'       + cast(a.id_externo as varchar(10))                              + '</id_externo>' +
       '<ds_abreviado>'     + isnull(rtrim(c.ds_abreviado), '')                              + '</ds_abreviado>'  +
       '<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103)                     + '</dt_transferencia>' +
       '<nr_conta_origem>'  + cast(a.nr_conta_origem as varchar(20))                         + '</nr_conta_origem>' +
       '<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20))                        + '</nr_conta_destino>' +
       '<tp_natureza>'      + isnull(a.tp_natureza, '')                                      + '</tp_natureza>' +
       '<tp_conta>'         + isnull(b.tp_conta, '')                                         + '</tp_conta>' +
       '<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
       '<ds_historico>'     + isnull(ds_historico, '')                                       + '</ds_historico>' +
	   '</registro>' as registro
 From  gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
  join gr_tb_mesa_empresas_renda_fixa_contas    b (nolock) on b.nr_conta = a.nr_conta_origem
  join gr_tb_mesa_empresas_renda_fixa           c (nolock) on c.id_externo = b.id_externo
 Where (a.dt_transferencia >= @dt_movto_de  or @dt_movto_de  is null)
   and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
   and (a.id_externo        = @id_externo   or @id_externo   is null)
   and (a.nr_conta_origem   = @nr_conta     or @nr_conta     is null)
   and (a.tp_natureza       = @tp_natureza  or @tp_natureza  is null)
          order by a.dt_transferencia) as t
 Union all
 Select '</root>'
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, mas coloquei e deu o seguinte erro:

 

 

Msg 1033, Level 15, State 1, Procedure gr_sp_mon_caixa_empresa_ligada_historico, Line 32

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

 

Código:

USE [EvolutionGR]
GO
/****** Object:  StoredProcedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico]    Script Date: 05/16/2012 15:50:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER procedure [dbo].[gr_sp_mon_caixa_empresa_ligada_historico](@dt_movto_de  datetime      = NULL,
                                                             @dt_movto_ate datetime      = NULL,
                                                             @id_externo   int           = NULL,
                                                             @nr_conta     numeric(20,0) = NULL,
                                                             @tp_natureza  char(1)       = NULL)
as
begin
set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
       Select '<root>'
       Union all
       select t.registro from (Select '<registro>'         +
              '<id_externo>'       + cast(a.id_externo as varchar(10))                              + '</id_externo>' +
              '<ds_abreviado>'     + isnull(rtrim(c.ds_abreviado), '')                              + '</ds_abreviado>'  +
              '<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103)                     + '</dt_transferencia>' +
              '<nr_conta_origem>'  + cast(a.nr_conta_origem as varchar(20))                         + '</nr_conta_origem>' +
              '<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20))                        + '</nr_conta_destino>' +
              '<tp_natureza>'      + isnull(a.tp_natureza, '')                                      + '</tp_natureza>' +
              '<tp_conta>'         + isnull(b.tp_conta, '')                                         + '</tp_conta>' +
              '<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
              '<ds_historico>'     + isnull(ds_historico, '')                                       + '</ds_historico>' +
                  '</registro>' as registro
        From  gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
         join gr_tb_mesa_empresas_renda_fixa_contas    b (nolock) on b.nr_conta = a.nr_conta_origem
         join gr_tb_mesa_empresas_renda_fixa           c (nolock) on c.id_externo = b.id_externo
        Where (a.dt_transferencia >= @dt_movto_de  or @dt_movto_de  is null)
          and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
          and (a.id_externo        = @id_externo   or @id_externo   is null)
          and (a.nr_conta_origem   = @nr_conta     or @nr_conta     is null)
          and (a.tp_natureza       = @tp_natureza  or @tp_natureza  is null)
          order by a.dt_transferencia) as t
        Union all
        Select '</root>'
end

 

Agradeço ajuda... ta tenso isso, me tirando o sono... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela mensagem, isto parece uma restrição para criação de PROCEDURES e VIEWS.

 

http://blog.sqlauthority.com/2010/08/23/sql-server-order-by-does-not-work-limitation-of-the-views-part-1/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela mensagem, isto parece uma restrição para criação de PROCEDURES e VIEWS.

 

http://blog.sqlauthority.com/2010/08/23/sql-server-order-by-does-not-work-limitation-of-the-views-part-1/

 

 

Vou ler e já dou o feedback

 

Obrogadp!

 

Não virou... será q se eu tirar o union all e concatenar o '<root>' em uma variavel em cima do select funcina?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui!

 

create procedure dbo.gr_sp_mon_caixa_empresa_ligada_historico(@dt_movto_de  datetime      = NULL,
                                                             @dt_movto_ate datetime      = NULL,
                                                             @id_externo   int           = NULL,
                                                             @nr_conta     numeric(20,0) = NULL,
                                                             @tp_natureza  char(1)       = NULL)
as
begin

Declare @str_xml varchar(2000)

set nocount on
-- Empresa / Data / Cta Orig / Cta Dest / Natureza / Cta Cor / Valor / Histórico
select @str_xml = ''
select @str_xml = @str_xml + '<root>'	
select @str_xml = @str_xml + '<registro>'         +
       '<id_externo>'       + cast(a.id_externo as varchar(10))                              + '</id_externo>' +
       '<ds_abreviado>'     + isnull(rtrim(c.ds_abreviado), '')                              + '</ds_abreviado>'  +
       '<dt_transferencia>' + convert(char(10), a.dt_transferencia, 103)                     + '</dt_transferencia>' +
       '<nr_conta_origem>'  + cast(a.nr_conta_origem as varchar(20))                         + '</nr_conta_origem>' +
       '<nr_conta_destino>' + cast(a.nr_conta_destino as varchar(20))                        + '</nr_conta_destino>' +
       '<tp_natureza>'      + isnull(a.tp_natureza, '')                                      + '</tp_natureza>' +
       '<tp_conta>'         + isnull(b.tp_conta, '')                                         + '</tp_conta>' +
       '<vl_transferencia>' + dbo.gr_fc_mascara_valor('###.##', isnull(vl_transferencia, 0)) + '</vl_transferencia>' +
       '<ds_historico>'     + isnull(ds_historico, '')                                       + '</ds_historico>' +
	   '</registro>'
  from gr_tb_mon_caixa_empresa_ligada_historico a (nolock)
  join gr_tb_mesa_empresas_renda_fixa_contas    b (nolock) on b.nr_conta = a.nr_conta_origem
  join gr_tb_mesa_empresas_renda_fixa           c (nolock) on c.id_externo = b.id_externo
 where (a.dt_transferencia >= @dt_movto_de  or @dt_movto_de  is null)
   and (a.dt_transferencia <= @dt_movto_ate or @dt_movto_ate is null)
   and (a.id_externo        = @id_externo   or @id_externo   is null)
   and (a.nr_conta_origem   = @nr_conta     or @nr_conta     is null)
   and (a.tp_natureza       = @tp_natureza  or @tp_natureza  is null) order by convert(datetime, a.dt_transferencia, 103) desc
 select @str_xml = @str_xml + '</root>'
 select @str_xml
End

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.