0% encontró este documento útil (0 votos)
239 vistas9 páginas

Programación Transact Estructura Condicional If

Este documento describe el uso de la estructura condicional IF en Transact SQL en Microsoft SQL Server. Explica la sintaxis de IF y proporciona ejemplos de cómo usar IF para insertar registros en una tabla solo si no existen registros duplicados, y para mostrar mensajes condicionales dependiendo de si hay o no registros asociados en otra tabla. También resume otras características de Transact SQL como procedimientos almacenados, funciones y disparadores.

Cargado por

Rumiche Gjosue
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
239 vistas9 páginas

Programación Transact Estructura Condicional If

Este documento describe el uso de la estructura condicional IF en Transact SQL en Microsoft SQL Server. Explica la sintaxis de IF y proporciona ejemplos de cómo usar IF para insertar registros en una tabla solo si no existen registros duplicados, y para mostrar mensajes condicionales dependiendo de si hay o no registros asociados en otra tabla. También resume otras características de Transact SQL como procedimientos almacenados, funciones y disparadores.

Cargado por

Rumiche Gjosue
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Programación Transact Estructura Condicional If - Bases

de Datos en Microsoft Sql Server 2014 (28-35)


Juan Carlos Arcila Díaz 3 years ago Curso Completo Sql Server 2014
Buen día amigos de IncanatoIt, en este artículo veremos la programación Transact
Sql que proporciona Microsoft Sql Server, veremos las estructuras de control, que
pueden ser: Estructuras secuenciales, estructuras condicionales y estructuras
repetitivas.
Iniciaremos viendo primero el uso de la estructura condicional If en sql server para
evaluar una condición lógica y ejecutar cierto número determinado de instrucciones
según corresponda.
Resolveremos algunos ejemplos para entender de manera adecuada el uso de la
estructura condicional If en Sql Server.

Puedes seguir el curso Completo desde:


https://www.youtube.com/watch?v=YeXY3RoEc-
A&index=28&list=PLZPrWDz1MolrT1ID3CRIeR6jPLJ7Fp1x6
Puedes descargar el Material del Curso desde:
Archivos del Curso, Backup y Presentaciones http://adf.ly/pl1Bk

Programación Transact SQL

Transact SQL es el lenguaje de programación que proporciona Microsoft SQl


Server para extender el SQL estándar con otro tipo de instrucciones y elementos
propios de los lenguajes de programación ya que esta parte está limitada en SQL.

Scripts
Procedimientos Almacenados
Funciones
Triggers

Estructuras de Control:
Estructuras Secuenciales: Las instrucciones se ejecutan una a continuación de
otra.

Estructuras Selectivas: Las instrucciones se ejecutan según el valor lógico de


una variable.

Estructuras Repetitivas: Las instrucciones se ejecutan en forma repetida según


una condición lógica llamada ciclo ó bucle.

Estructura Selectiva IF
La estructura IF evalúa una condición lógica y en función del resultado booleano
(true o false) se realiza una u otra expression.

Estructura Selectiva IF - Sintáxis

IF <Condición_Lógica>
<BEGIN>
<Expresiones_CondiciónTrue>
<END>
ELSE
<BEGIN>
< Expresiones_CondiciónFalse>
<END>

Ejemplos:

Ejemplo 1:
Implementar un Script que permita insertar un nuevo registro en la tabla país, en
caso se registre duplicidad en el nombre de un país mostrar un mensaje de “país
ya registrado”, caso contrario insertar dicho registro y mostrar un mensaje de
“País registrado Correctamente”.

Tabla País
--Estructura Condicional IF
declare @idpais char(4)='0011',
@nombre varchar(30)='Argelia'

if exists(select * from pais where nombre=@nombre)


begin
print 'País ya Registrado'
end
else
begin
insert into pais
values (@idpais,@nombre)
print 'País Registrado Correctamente'
end
go

Ejemplo 2:
Implementar un Script que permita Mostrar el mensaje de No hay Pasajeros en
este país, solo cuando el total de pasajeros asignados a un determinado País no
tenga registros en la tabla pasajero. Caso contrarios determinar cuántos pasajeros
tiene dicho país.

Tabla Pais-Pasajero
declare @nombre char(40)='Bolivia'

if (select count(*) from pasajero pas


left join pais pai on pas.idpais=pai.idpais
group by pai.nombre
having pai.nombre=@nombre) is null
begin
print 'No hay Pasajeros en este País'
end
else
begin
declare @total int
select @total=count(*)
from pasajero pas left join pais pai
on pas.idpais=pai.idpais
group by pai.nombre
having pai.nombre=@nombre

print 'El País ' + @nombre + 'Tiene ' +


cast(@total as char(2)) + ' Pasajero'
end
go

AVG (Transact-SQL)
Otras versiones
Devuelve el promedio de los valores de un grupo. Se omiten los valores NULL.

Se aplica a: SQL Server (SQL Server 2008 a versión actual), Windows Azure SQL
Database (Versión inicial a versión actual).
Convenciones de sintaxis de Transact-SQL

Sintaxis
AVG ( [ ALL | DISTINCT ] expression )
OVER ( [ partition_by_clause ] order_by_clause )

Argumentos
ALL

Aplica la función de agregado a todos los valores. ALL es el valor predeterminado.


DISTINCT

Especifica que AVG se ejecute solo en cada instancia única de un valor, sin importar el
número de veces que aparezca el valor.
expression

Es una expresión de la categoría de tipo de datos numérico exacto o aproximado,


excepto para el tipo de datos bit. No se permiten funciones de agregado ni
subconsultas.
OVER ( [ partition_by_clause ] order_by_clause)

partition_by_clause divide el conjunto de resultados generado por la cláusula FROM en


particiones a las que se aplica la función. Si no se especifica, la función trata todas las
filas del conjunto de resultados de la consulta como un único
grupo. order_by_clause determina el orden lógico en el que se realiza la
operación. order_by_clause es obligatorio. Para obtener más información, vea OVER
(cláusula de Transact-SQL).

Tipos devueltos
El tipo de valor devuelto viene determinado por el tipo del resultado evaluado de expression.

Resultado de la expresión Tipo de valor devuelto

tinyint int

smallint int

int int

bigint bigint

Categoría decimal (p, s) decimal(38, s) dividido por decimal(10, 0)

Categoría money y smallmoney money


Categoría float y real float

Comentarios
Si el tipo de datos de expression es un tipo de datos de alias, el tipo de valor devuelto es
también del tipo de datos de alias. No obstante, si se asciende el tipo de datos base del tipo de
datos de alias, por ejemplo, de tinyint a int, el valor devuelto es del tipo de datos ascendido, no
del tipo de datos de alias.
AVG () calcula la media de un conjunto de valores dividiendo la suma de estos valores por el
recuento de valores no NULL. Si la suma supera el valor máximo para el tipo de datos del valor
devuelto, se devolverá un error.
AVG es una función determinista cuando se utiliza con las cláusulas OVER y ORDER BY. Es no
determinista si se especifica con las cláusulas OVER y ORDER BY. Para obtener más información,
vea Funciones deterministas y no deterministas.

Ejemplos
A.Usar las funciones SUM y AVG para los cálculos
En el ejemplo siguiente se calcula el promedio de horas de vacaciones y la suma de horas de
baja por enfermedad que han utilizado los vicepresidentes de Adventure Works Cycles. Cada
una de estas funciones de agregado produce un valor único de resumen para todas las filas
recuperadas. En el ejemplo se usa la base de datos AdventureWorks2012.
SELECT AVG(VacationHours)AS 'Average vacation hours',
SUM(SickLeaveHours) AS 'Total sick leave hours'
FROM HumanResources.Employee
WHERE JobTitle LIKE 'Vice President%';
El conjunto de resultados es el siguiente.
Average vacation hours Total sick leave hours
---------------------- ----------------------
25 97
(1 row(s) affected)
B.Usar las funciones SUM y AVG con una cláusula GROUP BY
Cuando se utiliza con una cláusula GROUP BY, cada función de agregado produce un solo valor
para cada grupo, en vez de para toda la tabla. En el ejemplo siguiente se obtienen valores de
resumen para cada territorio de ventas de la base de datos AdventureWorks2012. El resumen
muestra el promedio de bonificaciones recibidas por los vendedores de cada territorio y la suma
de las ventas realizadas hasta la fecha en cada territorio.
SELECT TerritoryID, AVG(Bonus)as 'Average bonus', SUM(SalesYTD) as
'YTD sales'
FROM Sales.SalesPerson
GROUP BY TerritoryID;
GO
El conjunto de resultados es el siguiente.
TerritoryID Average Bonus YTD Sales
----------- --------------------- ---------------------
NULL 0.00 1252127.9471
1 4133.3333 4502152.2674
2 4100.00 3763178.1787
3 2500.00 3189418.3662
4 2775.00 6709904.1666
5 6700.00 2315185.611
6 2750.00 4058260.1825
7 985.00 3121616.3202
8 75.00 1827066.7118
9 5650.00 1421810.9242
10 5150.00 4116871.2277

(11 row(s) affected)


C.Usar AVG con DISTINCT
En la instrucción siguiente se devuelve el precio de venta promedio de los productos de la base
de datos AdventureWorks2012. Si se especifica DISTINCT, solo se tienen en cuenta valores
únicos en el cálculo.
SELECT AVG(DISTINCT ListPrice)
FROM Production.Product;
El conjunto de resultados es el siguiente.
------------------------------
437.4042
(1 row(s) affected)
D.Usar AVG sin DISTINCT
Sin DISTINCT, la función AVG busca el precio de venta promedio de todos los productos de la
tabla Product de la base de datos AdventureWorks2012, incluidos los valores duplicados.
SELECT AVG(ListPrice)
FROM Production.Product;
El conjunto de resultados es el siguiente.
------------------------------
438.6662
(1 row(s) affected)
E.Usar la cláusula OVER
En el ejemplo siguiente se usa la función AVG con la cláusula OVER para proporcionar una
media móvil de ventas anuales para cada territorio de la tabla Sales.SalesPerson de la base
de datos AdventureWorks2012. Se crean particiones de los datos por TerritoryID y se
ordenan lógicamente por SalesYTD. Esto significa que la función AVG se calcula para cada
territorio en función del año de ventas. Observe que para TerritoryID 1, solo hay dos filas
para el año de ventas 2005, que representan los dos vendedores con ventas durante ese año. Se
calculan las ventas medias de estas dos filas y la tercera fila que representa las ventas durante el
año 2006 se incluye en el cálculo.
SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,CONVERT(varchar(20),AVG(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(varchar(20),SUM(SalesYTD) OVER (PARTITION BY TerritoryID
ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY TerritoryID,SalesYear;
El conjunto de resultados es el siguiente.
BusinessEntityID TerritoryID SalesYear SalesYTD
MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- --------
------------ --------------------
274 NULL 2005 559,697.56
559,697.56 559,697.56
287 NULL 2006 519,905.93
539,801.75 1,079,603.50
285 NULL 2007 172,524.45
417,375.98 1,252,127.95
283 1 2005 1,573,012.94
1,462,795.04 2,925,590.07
280 1 2005 1,352,577.13
1,462,795.04 2,925,590.07
284 1 2006 1,576,562.20
1,500,717.42 4,502,152.27
275 2 2005 3,763,178.18
3,763,178.18 3,763,178.18
277 3 2005 3,189,418.37
3,189,418.37 3,189,418.37
276 4 2005 4,251,368.55
3,354,952.08 6,709,904.17
281 4 2005 2,458,535.62
3,354,952.08 6,709,904.17

(10 row(s) affected)


En este ejemplo, la cláusula OVER no incluye PARTITION BY. Esto significa que la función se
aplicará a todas las filas devueltas por la consulta. La cláusula ORDER BY especificada en la
cláusula OVER determina el orden lógico al que se aplica la función AVG. La consulta devuelve
una media móvil de ventas por año para todos los territorios de ventas especificados en la
cláusula WHERE. La cláusula ORDER BY especificada en la instrucción SELECT determina el orden
en que se muestran las filas de la consulta.
SELECT BusinessEntityID, TerritoryID
,DATEPART(yy,ModifiedDate) AS SalesYear
,CONVERT(varchar(20),SalesYTD,1) AS SalesYTD
,CONVERT(varchar(20),AVG(SalesYTD) OVER (ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS MovingAvg
,CONVERT(varchar(20),SUM(SalesYTD) OVER (ORDER BY
DATEPART(yy,ModifiedDate)
),1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL OR TerritoryID < 5
ORDER BY SalesYear;
El conjunto de resultados es el siguiente.
BusinessEntityID TerritoryID SalesYear SalesYTD
MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- --------
------------ --------------------
274 NULL 2005 559,697.56
2,449,684.05 17,147,788.35
275 2 2005 3,763,178.18
2,449,684.05 17,147,788.35
276 4 2005 4,251,368.55
2,449,684.05 17,147,788.35
277 3 2005 3,189,418.37
2,449,684.05 17,147,788.35
280 1 2005 1,352,577.13
2,449,684.05 17,147,788.35
281 4 2005 2,458,535.62
2,449,684.05 17,147,788.35
283 1 2005 1,573,012.94
2,449,684.05 17,147,788.35
284 1 2006 1,576,562.20
2,138,250.72 19,244,256.47
287 NULL 2006 519,905.93
2,138,250.72 19,244,256.47
285 NULL 2007 172,524.45
1,941,678.09 19,416,780.93
(10 row(s) affected)

También podría gustarte