sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo usar la lógica IF...THEN en SQL Server

SQL Server tiene una capacidad única que le permite ejecutar lógica programática en tiempo real en los valores dentro de su consulta. Según esas evaluaciones lógicas, puede generar varios valores como parte del conjunto de datos devuelto.

Uso de la declaración CASE

Esto se logra más fácilmente en todas las versiones de SQL Server usando el CASE declaración, que actúa como una lógica IF...THEN...ELSE expresión y devuelve varios valores dependiendo del resultado.

En este ejemplo a continuación, queremos devolver un locale adicional columna que especifica si nuestro libro tiene lugar en la Tierra Media o en la Tierra antigua normal.

SELECT
  CASE
    WHEN
      books.title = 'The Hobbit'
        THEN
          'Middle-earth'
    WHEN
      books.primary_author = 'Tolkien'
        THEN
          'Middle-earth'
    ELSE
      'Earth'
  END AS locale,
  books.*
FROM
  books

Antes de examinar el CASE especial aspecto de esta declaración, eliminemos temporalmente el CASE para notar que este es un SELECT extremadamente simple declaración en la superficie:

SELECT
  books.*
FROM
  books

Por lo tanto, examinemos cómo el CASE sección está estructurada y qué comportamiento lógico estamos realizando.

CASE
  WHEN
    books.title = 'The Hobbit'
      THEN
        'Middle-earth'
  WHEN
    books.primary_author = 'Tolkien'
      THEN
        'Middle-earth'
  ELSE
    'Earth'
END AS locale

Para comenzar, inicializamos el CASE luego especifica bajo qué condiciones (WHEN ) nuestro CASE declaración debe evaluar un resultado. En este ejemplo, estamos examinando books.title y books.primary_author; si se ajusta a nuestro tema Tolkien-esque, THEN devolvemos el valor 'Tierra Media'. Si ninguno de los campos coincide con nuestra búsqueda, en su lugar devolvemos el valor de 'Tierra'.

Para reorganizar la lógica como un psuedo-código IF...THEN...ELSE declaración, simplemente le estamos pidiendo a SQL que evalúe:

IF
  title == 'The Hobbit' OR
  primary_author == 'Tolkien'
THEN
  RETURN 'Middle-earth'
ELSE
  RETURN 'Earth'
END

Finalmente, es fundamental recordar que un CASE La declaración siempre debe agregarse al final con un END coincidente declaración. En el ejemplo anterior, también cambiamos el nombre del valor resultante que se devuelve a locale , aunque eso es ciertamente opcional.

Usando la función IIF

Si está utilizando una versión más moderna de SQL, es útil saber que SQL Server 2012 introdujo el muy útil IIF función. IIF es un método abreviado para realizar un IF...ELSE /CASE instrucción y devolver uno de dos valores, dependiendo de la evaluación del resultado.

Reestructurando nuestro ejemplo anterior para usar IIF es bastante simple.

SELECT
  IIF(
    books.title = 'The Hobbit' OR books.primary_author = 'Tolkien',
    'Middle-earth',
    'Earth')
  AS locale,
  books.*
FROM
  books

Con un IIF función, reemplazamos en gran medida gran parte del azúcar sintáctico del CASE declaración con algunos simples separadores de coma para diferenciar nuestros argumentos.

En total, ambos CASE y IIF hacer el mismo trabajo, pero si se le da la opción, IIF generalmente será mucho más simple de usar.