none
Problema com TOP

    Question

  • Bem pessoal, estou tendo um problema com a função TOP do Sql Server 2005 Express Edition

    Tenho um select assim:

    SELECT [cliCodigo]
          ,[cliNome]
          ,[cliTipo]
          ,[cliCpfCgc]
          ,[cliNomeFilial]
          ,[cliFantasia]
          ,[cliStatus]
      FROM [CadastroCliente]
    ORDER BY cliStatus, cliNome

    que me traz os seguintes resultados:

    cliCodigo   cliNome                                       cliStatus
    ----------- --------------------------------------------- ---------
    0            CLIENTE NAO ESPECIFICADO                     
    189         ESC. DE 1º GRAU IRM.JACINTA S.SOUZA LIMA      
    629         CENTRO TECNOLOGICO / UFES                     
    1297        CENTRAL DE COPIA - COC - CAMPUS I             
    1378        SUPRIMAQ COMERCIO LTDA                        
    2313        CASA DE COPIA - COOPEDUC                      
    2341        METALURGICA UNIAO LTDA                        
    2666        CENTRAL DE COPIA - COLEGIO SALESIANO          
    2556        TRD TRANSPORTE E LOGISTICA LTDA               
    3003        AUREA PRISCILA DE ALMEIDA ANDRADE             
    3061        EMP. BRAS. DE CORREIOS E TELEGRAFOS           
    3078        MARCOS ANTONIO BOAMORTE SAMORA                
    3018        PEDRA E CAL ENGENHARIA LTDA                   A
    3013        ISE IMPORTACAO E EXPORTACAO LTDA              A
    3014        ANA PAULA BRANDAO                             A
    2662        VERA LUCIA GONCALVES RODRIGUES                A
    2902        SANTA MARIA ENGENHARIA LTDA                   A
    2916        GRAF. E EDITORA VILA GRAF                     A
    2764        ADENILSON ANTONIO TOSI (CHUMBINHO)            A


    ----

    pois bem, olhem agora:

    SELECT TOP(15) [cliCodigo]
          ,[cliNome]
          ,[cliStatus]
      FROM [GAT_DB].[dbo].[CadastroCliente]
    ORDER BY cliStatus

    Quando eu coloco o TOP fica assim:

    cliCodigo   cliNome                                       cliStatus
    ----------- --------------------------------------------- ---------
    0            CLIENTE NAO ESPECIFICADO                     
    189         ESC. DE 1º GRAU IRM.JACINTA S.SOUZA LIMA      
    629         CENTRO TECNOLOGICO / UFES                     
    1297        CENTRAL DE COPIA - COC - CAMPUS I             
    1378        SUPRIMAQ COMERCIO LTDA                        
    2313        CASA DE COPIA - COOPEDUC                      
    2341        METALURGICA UNIAO LTDA                        
    2556        TRD TRANSPORTE E LOGISTICA LTDA               
    2666        CENTRAL DE COPIA - COLEGIO SALESIANO          
    3003        AUREA PRISCILA DE ALMEIDA ANDRADE             
    3061        EMP. BRAS. DE CORREIOS E TELEGRAFOS           
    3078        MARCOS ANTONIO BOAMORTE SAMORA                
    28          AMAZON COMERCIAL LTDA ME                      A
    64          CARLA REGINA DE FREITAS                       A
    86          CX. ESC. DA EMEF ARTHUR DA COSTA E SILVA      A



    -----------


    Como puderam perceber, ele trouxe dados diferentes, quando eu coloquei top, depois do registro 3078, ele me trouxe AMAZON..., quando deveria ter trago PEDRA E CAL....
    Friday, May 09, 2008 6:27 PM

Answers

  • Gente... consegui resolver hehe =D

    Bem, como eu falei o TOP realmente bagunça o select, depois de várias seleções não teve jeito.
    Tive que apelar, coloquei um cliStatus,cliCodigo no order by, assim o cliCodigo ficar responsavel por ageitar a seleção do jeito que quero, ficando igual tanto para um select COM TOP quanto para um SEM TOP.

    Resumindo:

    (Select * from cadastrocliente oder by cliStatus) <> (Select top(15) * from cadastrocliente oder by cliStatus)
    (Select * from cadastrocliente oder by cliStatus, cliNome) = (Select top(15) * from cadastrocliente oder by cliStatus, cliNome)
    Friday, May 09, 2008 8:47 PM

All replies

  • Aparentemente seu ORDER BY também MUDOU

     

     R3N4N wrote:
    Bem pessoal, estou tendo um problema com a função TOP do Sql Server 2005 Express Edition

    SELECT [cliCodigo]
          ,[cliNome]
          ,[cliTipo]
          ,[cliCpfCgc]
          ,[cliNomeFilial]
          ,[cliFantasia]
          ,[cliStatus]
      FROM [CadastroCliente]
    ORDER BY cliStatus, cliNome

     

    SELECT TOP(15) [cliCodigo]
          ,[cliNome]
          ,[cliStatus]
      FROM [GAT_DB].[dbo].[CadastroCliente]
    ORDER BY cliStatus

    Friday, May 09, 2008 6:38 PM
  • Sergio,

     

    Com o Top no SQL Server 2005!!!

     

    Mas qual é problema?

    Friday, May 09, 2008 7:09 PM
  • A desculpe, eu que postei errado mesmo, o de cima foi um teste que fiz tentando ordenar por mais uma coluna pra ver se resolvia, mas num resolveu.

    Corrigindo:

    SELECT [cliCodigo]
          ,[cliNome]
          ,[cliTipo]
          ,[cliCpfCgc]
          ,[cliNomeFilial]
          ,[cliFantasia]
          ,[cliStatus]
      FROM [CadastroCliente]
    ORDER BY cliStatus

     

    SELECT TOP(15) [cliCodigo]
          ,[cliNome]
          ,[cliStatus]
      FROM [GAT_DB].[dbo].[CadastroCliente]
    ORDER BY cliStatus



    FOI ERRO DE DIGITAÇÃO (QUE BURRO EU SOU), kkkk, o order by é mesma coisa. =D

    PS: Mesmo com order by igual, continua trazendo selects diferentes.
    Friday, May 09, 2008 7:17 PM
  • Eu disse o problema acima =D

    Mas vou dizer denovo pra não haver dúvidas.

    Preste atenção na passagem da linha 12 para 13,

    Na primeira seleção (sem o TOP) a linha 13 contem o registro:
     3018        PEDRA E CAL ENGENHARIA LTDA                   A

    Na segunda seleção (com o TOP15) a linha 13 contem o registro:
    28          AMAZON COMERCIAL LTDA ME                      A

    Ou seja, só de colocar o TOP ele ta alterandominha seleção.

    PS: Eu postei errado a primeira seleção, o ORDER BY é apenas com cliStatus [SEM O CLINOME], é que eu tava fazendo uns testes aqui, e quando copiei, copiei a seleção errada e postei sem querer =(
    Friday, May 09, 2008 7:22 PM
  • R3N4N,

     

    Mas como esta organizada a esta table que você esta utilizando?

    Friday, May 09, 2008 7:36 PM
  • Como assim? sua Estrutura?

    Se for:

    CREATE TABLE [dbo].[CadastroCliente](
        [cliCodigo] [int] NOT NULL,
        [cliCodigoAtividade] [int] NULL,
        [cliDtCadastro] [datetime] NULL,
        [cliDtAlteracao] [datetime] NULL,
        [cliNome] [varchar](45) NOT NULL,
        [cliTipo] [char](1) NOT NULL,
        [cliCpfCgc] [varchar](18) NULL,
        [cliEstadoCivil] [char](1) NOT NULL,
        [cliMae] [varchar](45) NULL,
        [cliPai] [varchar](45) NULL,
        [cliDtNascimento] [datetime] NULL,
        [cliNacionalidade] [varchar](45) NULL,
        [cliNaturalidade] [varchar](30) NULL,
        [cliRG] [varchar](20) NULL,
        [cliSexo] [char](1) NOT NULL,
        [cliInscEstadual] [varchar](20) NULL,
        [cliInscMunicipal] [varchar](20) NULL,
        [cliEndereco] [varchar](50) NULL,
        [cliComplemento] [varchar](30) NULL,
        [cliBairro] [varchar](25) NULL,
        [cliCidade] [varchar](30) NULL,
        [cliUF] [char](2) NULL,
        [cliCEP] [varchar](9) NULL,
        [cliReferencia] [varchar](100) NULL,
        [cliCelular] [varchar](14) NULL,
        [cliFax] [varchar](14) NULL,
        [cliTelefone1] [varchar](14) NULL,
        [cliRamal1] [varchar](10) NULL,
        [cliTelefone2] [varchar](14) NULL,
        [cliRamal2] [varchar](10) NULL,
        [cliEmail] [varchar](40) NULL,
        [cliHomePage] [varchar](40) NULL,
        [cliContato] [varchar](70) NULL,
        [cliContato2] [varchar](70) NULL,
        [cliVinculo] [varchar](max) NULL,
        [cliObservacao] [varchar](max) NULL,
        [cliStatus] [char](1) NOT NULL,
        [cliStatusAutomatico] [char](1) NOT NULL,
        [cliNomeFilial] [varchar](45) NULL,
        [cliFantasia] [varchar](30) NULL,
        [cliEnderecoEntFat] [varchar](50) NULL,
        [cliComplementoEntfat] [varchar](30) NULL,
        [cliBairroEntFat] [varchar](25) NULL,
        [cliCidadeEntFat] [varchar](30) NULL,
        [cliUFEntFat] [char](2) NULL,
        [cliCepEntFat] [varchar](9) NULL,
        [cliReferenciaEntFat] [varchar](100) NULL,
        [cliFormaPagamento] [char](1) NULL,
        [cliTipoPagamento] [char](1) NULL,
        [cliPrazoPagamento] [varchar](10) NULL,
        [cliNFiscalServicos] [char](1) NULL,
        [cliNFiscalPecas] [char](1) NULL,
        [cliVendedorPadrao] [int] NULL,
        [cliCodigoMatriz] [int] NULL,
        [cliDtFundadaEm] [datetime] NULL,
        [cliDtSPCEm] [datetime] NULL,
        [cliTipoSPC] [char](1) NULL,
        [cliObservacaoPerfil] [varchar](max) NULL,
     CONSTRAINT [PK_CadastroCliente] PRIMARY KEY CLUSTERED
    (
        [cliCodigo] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    onde o cliCodigo é a primary key
    Friday, May 09, 2008 7:47 PM
  • Aé, esqueci de falar algo MUITO IMPORTANTE...

    Esse problema só ocorre em 2 situações:

    Quando eu ordeno por cliStatus e cliCpfCgc

    O resto das ordenações saem identicas com TOP ou sem TOP
    Friday, May 09, 2008 7:57 PM
  • Gente... consegui resolver hehe =D

    Bem, como eu falei o TOP realmente bagunça o select, depois de várias seleções não teve jeito.
    Tive que apelar, coloquei um cliStatus,cliCodigo no order by, assim o cliCodigo ficar responsavel por ageitar a seleção do jeito que quero, ficando igual tanto para um select COM TOP quanto para um SEM TOP.

    Resumindo:

    (Select * from cadastrocliente oder by cliStatus) <> (Select top(15) * from cadastrocliente oder by cliStatus)
    (Select * from cadastrocliente oder by cliStatus, cliNome) = (Select top(15) * from cadastrocliente oder by cliStatus, cliNome)
    Friday, May 09, 2008 8:47 PM