Articles

SQL CASE Statement-Simple and Searched Forms

The main purpose of a SQL CASE expression returns a value based on one or more conditional tests. Usar expressões de casos em qualquer lugar de uma expressão de declaração SQL é permitido. Embora verdadeiramente uma expressão, algumas pessoas se referem a eles como ” declarações de caso.”Isso provavelmente deriva de seu uso em linguagens de programação.

a expressão de caso SQL é extremamente versátil e utilizada ao longo de consultas SQLServer. Em particular, é usado na lista de colunas selecionadas, grupo por, ter, e ordem por cláusulas. A expressão de caso também padroniza (embelezar) dados ou realiza verificações para proteger contra erros, como dividir por zero.

Todos os exemplos para esta lição são baseados no Microsoft SQL Server Management Studio e na Base de dados AdventureWorks2012. Começar a usar o servidor SQL usando o meu guia gratuito e as ferramentas Microsoft gratuitas.

SQL Server CASE Statement

There are two forms for the CASE clause: simple and searched. Ambas as formas retornam um resultado baseado no teste de uma expressão. Embora tecnicamente expressões, você vai ver muitas pessoas se referem a ele como uma declaração.

a simples instrução de caso SQL é usada para testes de igualdade. Ele testa uma expressão contra múltiplos valores, o que o torna ótimo para transformar um conjunto de valores, tais como abreviaturas para sua forma longa correspondente.

a instrução de caso SQL pesquisada usa um formato de avaliação de expressão mais abrangente. É bom quando você deseja trabalhar com gamas de dados, tais como intervalos salariais ou idades.

começamos primeiro com o formulário simples, e em seguida cobrir pesquisado.

expressão de Caso Forma Simples

a forma simples da expressão de caso compara os resultados de uma expressão com uma série de testes e retorna um “resultado” quando o “teste” retorna verdadeiro.

a forma geral para uma expressão de caso de forma simples é:

CASE expression
WHEN test THEN result

ELSE otherResult
END

a outra afirmação é opcional numa expressão de caso. Ele retorna “outro resultado” quando não são feitos fósforos e mais está presente. Se não há mais nada na declaração de caso, então ela retorna nula.

The ELSE clause is a great way to catch bad or unexpected data values, and return a result other than NULL.

exemplo de transformação de dados

Existem várias razões para usar uma declaração de caso. O primeiro é transformar dados de um conjunto de valores para outro. Por exemplo, para exibir o gênero de um empregado como “Masculino” Ou “Feminino”, quando seus dados são codificados como “M” ou “F”, use uma expressão de caso para testar para a representação de um único caráter e retornar a sua forma longa correspondente.

O exemplo para isto é:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

Data Standardization Example

Similarly you can use a simple CASE clause to standardize several values into one. Estender o nosso exemplo mapeia várias variações tanto para homens como mulheres:

Você pode estar se perguntando se você poderia apenas criar outra tabela em sua base de dados e usar isso para pesquisar os valores. Eu tenderia a concordar que seria o melhor, mas em muitas situações você não terá permissão para criar tabelas no banco de dados. Neste caso, é deixado à sua disposição uma declaração seleta.

resumo

Aqui estão algumas coisas a considerar ao usar a expressão de caso simples:

  • Permite apenas comparações de igualdade.os testes de avaliação são avaliados pela ordem definida.
  • Devolve o resultado correspondente ao primeiro teste verdadeiro.
  • Se não for feita qualquer correspondência, o case devolve nulo a menos que esteja presente mais alguma coisa.

forma de pesquisa de casos

a forma de pesquisa da expressão de casos permite testes mais versáteis. Use – o para avaliar uma maior gama de testes. Na verdade, qualquer expressão booleana qualifica-se como um teste.

uma expressão pesquisada a partir de casos tem Este formato

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

com a forma pesquisada, use quando as cláusulas para avaliar expressões booleanas. O resultado da primeira expressão booleana verdadeira é devolvido.

abaixo está a forma de caso pesquisado do exemplo de gênero do empregado da seção anterior.

também usamos este mesmo exemplo para a simples instrução de caso SQL. Fiz isto para que pudesses ver a diferença subtil. Observe que cada cláusula quando agora contém o teste como uma expressão booleana.

a Comparação Simples e Procurado Formas de CASO de SQL

Aqui estão as instruções de lado a lado:

Simples versus CASO Procurado expressão

eu costumo usar o CASO procurado formato de expressão em todas as minhas SQL. Esta razão é simples, eu só tenho que lembrar de um formato!

desde que estamos testando expressões booleanas, a declaração de caso pesquisado não se limita a apenas testes de igualdade. Isto torna esta forma realmente boa para comparar gamas de valores. Talvez o gerente de vendas da Adventure Works quer organizar produtos por faixa de preço. Como isso pode ser feito com SQL?

Dados os seguintes nomes e intervalos fornecidos pelo gestor de vendas, podemos construir uma expressão de caso para comparar o preço da lista com uma gama de valores e, em seguida, devolver o nome apropriado da Gama de preços.

A instrução case é colocado na lista SELECIONAR coluna e retorna um valor de caractere. Aqui está o SQL que faz o truque:

Quando você executa essa consulta você vai ver PriceRange listados e exibindo valores de acordo com os intervalos especificados na expressão CASE:

em CASO de Declaração de Resultados

instruções de CASO também pode ser usado para ajudar a prevenir erros. Um bom exemplo é testar valores válidos dentro de expressões como quando você divide números.

Considere

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

Esta instrução retorna a mensagem

Divide by zero error encountered.

usando uma cláusula CASE, podemos assegurar que nós não inadvertidamente dividir por zero.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

uma expressão de caso pode ser usada onde uma expressão pode ser usada. Isto significa que você pode usá-lo para devolver um resultado de valor de coluna ou até mesmo usá-lo em uma ordem por cláusula.

na secção seguinte vamos explorar o caso usando a ordem por e grupo por cláusulas.

expressão de caso em ordem por

continuando com o pedido do gerente de vendas, suponha que ela também quer ver os produtos classificados por Gama de preços e, em seguida, o nome do produto. Já vimos como podemos mostrar os preços como uma coluna, mas como podemos classificar?

Na verdade é muito fácil. Como CASE é uma expressão, podemos usá-la como um dos valores a partir dos quais os resultados são ordenados. Lembre-se, nós não estamos limitados a apenas classificar colunas de mesa, nós também podemos classificar uma expressão.

Aqui está a consulta para ordenar pela gama de preços.

Podemos então adicionar instrução de caso para selecionar lista para também exibir o intervalo de preços.como pode ver, as coisas começam a complicar-se. Você vê como a instrução do caso é repetida tanto na lista selecionada quanto na ordem por? Felizmente, podemos simplificar isto um pouco, mas removendo a instrução do caso da ordem e substituindo – o com o nome da expressão de caso da lista selecionada Priderange como assim:

expressão de caso no grupo por

Agora que demos ao gerente de vendas uma lista detalhada que ela quer ver os dados resumidos-isso nunca acaba? Na minha experiência, não é assim, então saber muito SQL para saciar as demandas dos clientes é a sua chave para o sucesso.

de qualquer forma, a boa notícia é que podemos usar a expressão de caso que construímos para criar grupos de resumo. No seguinte SQL estamos agrupando os dados por Priceange. São criadas estatísticas resumidas sobre o preço mínimo, máximo e médio da lista.

Ao contrário da cláusula ORDER BY, não podemos referenciar a coluna alias Priceange no grupo BY. Toda a expressão do caso tem de ser repetida. Aqui estão os resultados da nossa consulta:

Resultados – CASO a Expressão no GRUPO

Wrap Up

Como você pode ver, usando expressões CASE adiciona versatilidade para suas instruções SQL. Eles não só permitem que você transforme dados de um conjunto de valores para outro, mas também pode ser usado para garantir que as declarações não retornam erros.

das duas formas, simples e pesquisadas, eu tendem a usar o formulário de busca. A razão é que a forma simples é limitada a testes de igualdade; enquanto, a forma pesquisada pode fazer isso e muito mais.

Uma vez que expressões de casos são expressões e não declarações ou cláusulas, elas podem ser usadas onde qualquer outra expressão é usada. Isso significa que você pode usar ao longo da instrução SELECT e em outro lugar em SQL.