Hoje vou mostrar como fazer uma query no SQL Server, utilizando uma ordenação específica passada pelo usuário.
Imagine que você está fazendo um relatório, que utiliza uma query SQL, porém você não consegue usar o ORDER BY nativamente, pois o usuário precisa que o relatório saia em uma ordem específica de digitação.
Então se pegarmos por exemplo, o cadastro de produtos, o que faz mais sentido é que a ordem seja por código, como 0001, 0002, 0003, 0004 e assim por diante. Ou por descrição, como Banana, Maçã, Pêra, etc.
Porém o usuário precisa dessa listagem em uma ordem específica digitada por ele, então deverá sair por exemplo, 0003, 0002, 0001 e 0004. Como tratar nesse cenário?
Pois bem jovens, a lógica para fazermos isso, seria +- assim:
- Criar uma tabela temporária que tenha dois campos, 1 contendo um valor sequência, e 1 sendo o campo de código da tabela em questão (seja produto, cliente, fornecedor, etc)
- Inserir os valores nessa temporária, deixando a ordem conforme a digitação do usuário
- Fazer um SELECT na tabela de destino (SB1 de Produtos, SA1 de Clientes, SA2 de Fornecedores, etc) fazendo um join com essa temporária criada no item 1
- Dropar a tabela temporária criada
Então abaixo o código da query:
--Criando a temporária com duas colunas, sequencia e código do produto CREATE TABLE #TempProds ( sequencia VARCHAR(5), produto VARCHAR(15) ) --Inserindo os valores, conforme digitação do usuário na segunda coluna INSERT INTO #TempProds Values('1', '0003'); INSERT INTO #TempProds Values('2', '0002'); INSERT INTO #TempProds Values('3', '0001'); INSERT INTO #TempProds Values('4', '0004'); --Executando query para selecionar as informações, fazendo join com tabela temporária criada SELECT B1_COD, B1_DESC, B1_CEST, B1_POSIPI FROM SB1010 SB1 INNER JOIN #TempProds TMP ON ( TMP.produto = B1_COD ) WHERE B1_FILIAL = ' ' AND SB1.D_E_L_E_T_ = ' ' ORDER BY TMP.sequencia --Dropando a tabela temporária criada DROP TABLE #TempProds;
Bom pessoal, por hoje é só.
Abraços e até a próxima.