ORDER BY. O exemplo usa a expressao para determinar a ordem de classificacao das linhas com base no valor da coluna fornecido.SELECT CD_REFERENCIA, DESC_PRODUTOFROM TBProdutoORDER BY CASE ST_PRODUTO WHEN 'A' THEN ST_PRODUTO END, CASE ST_PRODUTO WHEN 'I' THEN ST_PRODUTO END DESC;GOSELECT DESC_PRODUTO, QTD_ESTOQUE, SGL_UNIDADE, VLR_UNITARIOFROM TBEstoque e inner join TBProduto p on p.cd_produto = e.cd_produto inner join TBUnidade u on u.CD_UNIDADE = e.CD_UNIDADEORDER BY CASE WHEN DTH_MOVIMENTO < getdate() THEN VLR_UNITARIO ELSE DESC_PRODUTO END;Usando CASE em uma instrucao UPDATE. O exemplo usa a expressao para determinar o valor definido para a coluna VLR_UNITARIO dos produtos, aplicando um acrescimo de 10, 15 ou 20% de acordo com o valor e caso contrario, somente 5%. A clausula OUTPUT e usada para exibir os valores de antes e depois da alteracao.GOUPDATE TBEstoqueSET VLR_UNITARIO = ( CASE WHEN VLR_UNITARIO < 10.00 THEN VLR_UNITARIO * 1.10 WHEN VLR_UNITARIO >= 10.00 and VLR_UNITARIO < 50.00 THEN VLR_UNITARIO * 1.15 WHEN VLR_UNITARIO >= 50.00 THEN VLR_UNITARIO * 1.20 ELSE VLR_UNITARIO * 1.05 END )OUTPUT Deleted.CD_ESTOQUE, Deleted.VLR_UNITARIO AS ValorAnterior, Inserted.VLR_UNITARIO AS ValorAtualINSTRUCOES DE REPETICAO Vamos falar nesse artigo do laco de repeticao WHILE, existe tambem o CURSOR, mas para esse vamos futuramente dedicar um artigo exclusivo.A instrucao WHILE define uma condicao para executar repetidamente uma ou varias instrucoes em bloco. Enquanto a condicao especificada for verdadeira a repeticao acontece. Internamente podemos controlar o WHILE com o BREAK, parando a execucao, e o CONTINUE, continuando a execucao.Sintaxe WHILE Condicao { bloco de instrucoes | BREAK | CONTINUE } No aninhamentos de instrucoes WHILE o BREAK encerrara sempre o bloco WHILE mais interno prosseguindo para o proximo mais externo e assim sucessivamente.ExemplosInstrucao WHILE simples.DECLARE @VAR INT SET @VAR = 0WHILE @VAR < 10BEGIN PRINT 'O NUMERO E: ' + CAST(@VAR AS VARCHAR(3)) SET @VAR = @VAR + 1ENDPRINT 'O NUMERO FINAL E: ' + CAST(@VAR AS VARCHAR(3))Usando BREAK E CONTINUE. No exemplo abaixo, enquanto valor unitario medio for menor que R$ 50,00 a instrucao vai atualizar o peso para o dobro e depois selecionar o mais alto, se for maior que R$ 2000,00 entao para o loop, se nao continuara dobrando o preco ate satisfazer a condicao e em seguida exibe uma mensagem.GOWHILE (SELECT AVG(VLR_UNITARIO) FROM TBEstoque) < 50BEGIN UPDATE TBEstoque SET VLR_UNITARIO = VLR_UNITARIO * 2 SELECT MAX(VLR_UNITARIO) FROM TBEstoque IF (SELECT MAX(VLR_UNITARIO) FROM TBEstoque) > 2000 BREAK ELSE CONTINUEENDPRINT 'Muito alto para o mercado';Por hoje ficamos por aqui, espero que tenham gostado, caso tenha ficado duvidas sintam-se a vontade para perguntar, comentar, sugerir. No proximo artigo estaremos de volta com um assunto que e muito utilizado nas instrucoes SQL, a conversao de valores, entao vamos mostrar como utilizar o CAST e o CONVERT. Nao percam.Grande abraco e ate la.Artigos anteriores:Desvendando o SQL - Parte I - IntroducaoDesvendando o SQL - Parte II - Criando um Banco de Dados e TabelasDesvendando o SQL - Parte III - Alterando RegistrosDesvendando o SQL - Parte IV - ConsultasDesvendando o SQL - Parte V - Visoes