{"id":1482,"date":"2020-05-22T01:40:35","date_gmt":"2020-05-22T01:40:35","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1482"},"modified":"2020-05-22T01:40:36","modified_gmt":"2020-05-22T01:40:36","slug":"estructura-case-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1482","title":{"rendered":"Estructura Case en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"252\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase__D.png\" alt=\"\" class=\"wp-image-1483\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura Case<\/h2>\n\n\n\n<p>Evalua una expresi\u00f3n condicional y retorna uno de m\u00faltiples resultados.<\/p>\n\n\n\n<p>La estructura Case tiene dos formas:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>La expresi\u00f3n CASE simple compara una expresi\u00f3n con un conjunto de expresiones simples<br>para determinar el resultado.<\/li><li>La expresi\u00f3n CASE buscada eval\u00faa un conjunto de expresiones booleanas para determinar el resultado.<\/li><\/ol>\n\n\n\n<p>Ambos formatos admiten un argumento ELSE opcional.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>CASE se puede usar en cualquier declaraci\u00f3n o cl\u00e1usula que permita una expresi\u00f3n v\u00e1lida.<br>Por ejemplo, puede usar CASE en sentencias tales como SELECT, UPDATE, DELETE y SET, y en cl\u00e1usulas como Lista de campo en Select, IN, WHERE, ORDER BY y HAVING.<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Sintaxis<\/strong><\/p>\n\n\n\n<p><strong>Extructura CASE simple<\/strong><br>CASE input_expression<br>WHEN when_expression THEN result_expression [ \u2026n ]<br>[ ELSE else_result_expression ]<br>END<\/p>\n\n\n\n<p><strong>Estructura Case buscada<\/strong><br>CASE<br>WHEN Boolean_expression THEN result_expression [ \u2026n ]<br>[ ELSE else_result_expression ]<br>END<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p style=\"font-size:26px\"><strong>Ejemplos<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Usar Case para mostrar el nombre de la estaci\u00f3n del a\u00f1o, las opciones posible son Verano, Oto\u00f1o, Invierno, Primavera.<br><\/strong>(<a href=\"https:\/\/manualsqlserver.com\/?p=185\">Ver Funciones de Fecha<\/a>)<\/li><\/ol>\n\n\n\n<p>select Case Datepart(q, GetDate())<br>When 1 then &#8216;Verano&#8217;<br>When 2 then &#8216;Oto\u00f1o&#8217;<br>When 3 then &#8216;Invierno&#8217;<br>Else &#8216;Primavera&#8217;<br>End<\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li><strong>Listado de los empleados y su estaci\u00f3n en que nacieron. Para la estaci\u00f3n se usar\u00e1 una Subconsulta. <\/strong>(<a href=\"https:\/\/manualsqlserver.com\/?p=219\">Ver SubConsultas<\/a>)<\/li><\/ol>\n\n\n\n<p>use Northwind<br>go<\/p>\n\n\n\n<p>select e1.EmployeeID, E1.LastName, E1.FirstName,<br>(Select Case Datepart(q, E.BirthDate)<br>When 1 then &#8216;Verano&#8217;<br>When 2 then &#8216;Oto\u00f1o&#8217;<br>When 3 then &#8216;Invierno&#8217;<br>Else &#8216;Primavera&#8217; End<br>from Employees As E where E.EmployeeID = E1.EmployeeID)<br>As &#8216;Estaci\u00f3n&#8217;<br>from Employees As E1<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_01.png\" alt=\"\" class=\"wp-image-1484\" width=\"641\" height=\"415\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_01.png 562w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_01-300x194.png 300w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><\/figure><\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\"><li><strong>Usando AdventureWorks, mostrar los productos y la descripci\u00f3n de la L\u00ednea a la que pertenecen.<br>Las descripciones de las l\u00edneas tiene una propiedad con los valores R = Road, M = Mountain, T = Touring, S = Standard<br>Esta estructura Case muestra una Expresi\u00f3n Simple.<\/strong><\/li><\/ol>\n\n\n\n<p>USE AdventureWorks<br>go<br>SELECT P.ProductID As &#8216;C\u00f3digo&#8217;, P.ProductNumber As &#8216;N\u00ba Producto&#8217;, P.Name As &#8216;Descripci\u00f3n&#8217;,<br>Categor\u00eda = CASE P.ProductLine<br>WHEN &#8216;R&#8217; THEN &#8216;Road&#8217;<br>WHEN &#8216;M&#8217; THEN &#8216;Mountain&#8217;<br>WHEN &#8216;T&#8217; THEN &#8216;Touring&#8217;<br>WHEN &#8216;S&#8217; THEN &#8216;Standard&#8217;<br>ELSE &#8216;No en venta&#8217;<br>END<br>FROM Production.Product As P<br>ORDER BY ProductNumber<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_02.png\" alt=\"\" class=\"wp-image-1485\" width=\"694\" height=\"473\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_02.png 642w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_02-300x205.png 300w\" sizes=\"auto, (max-width: 694px) 100vw, 694px\" \/><\/figure><\/div>\n\n\n\n<ol class=\"wp-block-list\" start=\"4\"><li><strong>Usando Northwind, crear un listado de los productos y establecer los rangos de sus precios.<br>Este ejercicio muestra una estructura Case con Expresi\u00f3n buscada.<\/strong><\/li><\/ol>\n\n\n\n<p>USE Northwind<br>go<br>SELECT P.ProductID as &#8216;C\u00f3digo&#8217;, P.ProductName As &#8216;Descripci\u00f3n&#8217;,<br>P.UnitPrice as &#8216;Precio&#8217;,<br>&#8216;Rango de Precios&#8217; =<br>CASE<br>WHEN P.UnitPrice = 0 THEN &#8216;Precio no disponible&#8217;<br>WHEN P.UnitPrice &lt; 20 THEN &#8216;Menor a 20&#8217; WHEN P.UnitPrice &gt;= 20 and P.UnitPrice &lt; 50 THEN &#8216;Menor a 50&#8217; WHEN P.UnitPrice &gt;= 50 and P.UnitPrice &lt; 100 THEN &#8216;Menor 100&#8217;<br>ELSE &#8216;Sobre 100&#8217;<br>END<br>FROM Products As P<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_03.png\" alt=\"\" class=\"wp-image-1486\" width=\"685\" height=\"402\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_03.png 722w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_03-300x176.png 300w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/figure><\/div>\n\n\n\n<p style=\"font-size:26px\"><strong>Case en una instrucci\u00f3n Update<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\" start=\"5\"><li><strong>Usando Northwind, crear una Tabla con los Empleados y la cantidad de \u00f3rdenes generadas. (Ver Joins y Funciones de Agregado)<br>Luego agregar un campos para insertar una calificaci\u00f3n de acuerdo a lo siguiente:<br>Si tiene 100 o m\u00e1s \u00f3rdenes: Cobertura Cumplida<br>Si tiene entre 60 y 99: Revisi\u00f3n de planes<br>Si tiene menos de 60: Reingenier\u00eda urgente<\/strong><\/li><\/ol>\n\n\n\n<p><strong>Primero generar la tabla<\/strong>, <strong>inicialmente no tiene las calificaciones.<\/strong><\/p>\n\n\n\n<p>If exists (select * from sys.tables where name = &#8216;EmpleadosCantidadOrdenes&#8217;)<br>Begin<br>drop table EmpleadosCantidadOrdenes<br>End<br>select E.EmployeeID As &#8216;C\u00f3digo Empleado&#8217;,<br>Empleado = E.LastName + Space(1) + E.FirstName,<br>Count(O.OrderID) As &#8216;Cantidad de \u00f3rdenes&#8217;,<br>Calificaci\u00f3n = Space(20)<br>into EmpleadosCantidadOrdenes<br>from Employees As E<br>join Orders As O on E.EmployeeID = O.EmployeeID<br>group by E.EmployeeID, E.LastName + Space(1) + E.FirstName<br>Order by [Cantidad de \u00f3rdenes] desc<br>go<\/p>\n\n\n\n<p>Visualizar los datos<br>select * from EmpleadosCantidadOrdenes<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_04.png\" alt=\"\" class=\"wp-image-1487\" width=\"687\" height=\"310\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_04.png 734w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_04-300x136.png 300w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><figcaption>Listado de empleados sin las calificaciones.<\/figcaption><\/figure><\/div>\n\n\n\n<p><strong>Actualizar la calificaci\u00f3n<\/strong><br>update EmpleadosCantidadOrdenes set Calificaci\u00f3n =<br>( Case<br>when [Cantidad de \u00f3rdenes]> = 100 then &#8216;Cobertura cumplida&#8217;<br>when [Cantidad de \u00f3rdenes]> = 60 and [Cantidad de \u00f3rdenes]&lt;= 99 then &#8216;Revisi\u00f3n de planes&#8217;<br>when [Cantidad de \u00f3rdenes]&lt; 60 then &#8216;Reingenier\u00eda urgente&#8217;<br>End<br>)<br>go<\/p>\n\n\n\n<p>Visualizar nuevamente los datos despu\u00e9s de actualizados<br>select * from EmpleadosCantidadOrdenes<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_05-1.png\" alt=\"\" class=\"wp-image-1489\" width=\"732\" height=\"285\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_05-1.png 818w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_05-1-300x117.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_EstructuraCase_05-1-768x300.png 768w\" sizes=\"auto, (max-width: 732px) 100vw, 732px\" \/><\/figure><\/div>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Estructura Case Evalua una expresi\u00f3n condicional y retorna uno de m\u00faltiples resultados. La estructura Case tiene dos formas: La expresi\u00f3n CASE simple compara una expresi\u00f3n con un conjunto de expresiones simplespara determinar el resultado. La expresi\u00f3n CASE buscada eval\u00faa un conjunto de expresiones booleanas para determinar el resultado. Ambos formatos admiten un argumento ELSE opcional.<\/p><p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1482\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1483,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[154,51,120],"class_list":["post-1482","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","tag-case","tag-select","tag-update","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1482"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1482\/revisions"}],"predecessor-version":[{"id":1490,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1482\/revisions\/1490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1483"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}