Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Funciones Escalares en SQL SERVER

Estas en el tema de Funciones Escalares en SQL SERVER en el foro de SQL Server en Foros del Web. Saludos, estoy realizando una función en SQL, donde a partir de una fecha y una hora de unos datos me de su moda mediante una ...
  #1 (permalink)  
Antiguo 15/03/2016, 13:28
Avatar de joiscafo  
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 12 años
Puntos: 0
Información Funciones Escalares en SQL SERVER

Saludos, estoy realizando una función en SQL, donde a partir de una fecha y una hora de unos datos me de su moda mediante una consulta dentro de la función, anexo la función:

Código SQL:
Ver original
  1. ALTER FUNCTION [dbo].[modaHora]
  2. (
  3.     @fecha datetime,
  4.     @hr    INTEGER
  5. )
  6. RETURNS VARCHAR(3)
  7. AS
  8. BEGIN
  9.     DECLARE @moda VARCHAR(3)   
  10.    
  11.     SELECT TOP 1 DIR_VIENTO_TXT AS moda, COUNT(DIR_VIENTO_TXT) AS cuenta
  12.     FROM datos15minutos
  13.     WHERE FECHA = @fecha AND HORA = @hr AND DIR_VIENTO_TXT <> 'NULL'       
  14.     GROUP BY DIR_VIENTO_TXT ORDER BY cuenta DESC
  15.    
  16.  
  17.     RETURN @moda
  18. END
La consulta de SQL me da como resultado dos datos un texto y un valor, las funciones escalares solo deben arrojar un valor, pero lo que quiero hacer es que con el valor de cuenta de la consulta hacer una comparación para dar el resultado de la moda, pero no se si esto sea posible.

Saludos.

Última edición por gnzsoloyo; 15/03/2016 a las 14:54 Razón: MUY mal etiquetado de código
  #2 (permalink)  
Antiguo 15/03/2016, 15:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Funciones Escalares en SQL SERVER

Podrias regresar solo un valor y despues este valor separarlo en los 2 que necesitas :)

Código SQL:
Ver original
  1. CREATE FUNCTION [dbo].[modaHora]
  2. (
  3.     @fecha datetime,
  4.     @hr    INTEGER
  5. )
  6. RETURNS VARCHAR(3)
  7. AS
  8. BEGIN
  9.     DECLARE @moda VARCHAR(3), @cuenta DECIMAL  
  10.    
  11.     SELECT TOP 1    @moda = DIR_VIENTO_TXT + '|' +
  12.                      CONVERT(VARCHAR(2),COUNT(DIR_VIENTO_TXT) )
  13.     FROM datos15minutos
  14.     WHERE FECHA = @fecha AND HORA = @hr AND DIR_VIENTO_TXT <> 'NULL'        
  15.     GROUP BY DIR_VIENTO_TXT ORDER BY COUNT(*) DESC
  16.  
  17.     IF @cuenta = 1
  18.     BEGIN
  19.         SET @moda = NULL
  20.     END
  21.    
  22.  
  23.     RETURN @moda
  24. END

y ya con esos valores podrias hacer algo como esto:

Código SQL:
Ver original
  1. DECLARE @var VARCHAR(20)
  2. DECLARE @valor1 VARCHAR(20)
  3. DECLARE @valor2 VARCHAR(20)
  4. SET @var='a|a'
  5. SELECT @valor1=SUBSTRING(@var,1,charindex('|',@var)-1)
  6. SELECT @valor2=SUBSTRING(@var,charindex('|',@var)+1,len(@var))
  7. print @valor1
  8. print @valor2

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 15/03/2016 a las 15:55
  #3 (permalink)  
Antiguo 15/03/2016, 15:46
Avatar de joiscafo  
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 12 años
Puntos: 0
Respuesta: Funciones Escalares en SQL SERVER

Si alguien le sirve esta era la solución:

Código SQL:
Ver original
  1. CREATE FUNCTION [dbo].[modaHora]
  2. (
  3.     @fecha datetime,
  4.     @hr    INTEGER
  5. )
  6. RETURNS VARCHAR(3)
  7. AS
  8. BEGIN
  9.     DECLARE @moda VARCHAR(3), @cuenta DECIMAL  
  10.    
  11.     SELECT TOP 1    @moda = DIR_VIENTO_TXT,
  12.                     @cuenta = COUNT(DIR_VIENTO_TXT)
  13.     FROM datos15minutos
  14.     WHERE FECHA = @fecha AND HORA = @hr AND DIR_VIENTO_TXT <> 'NULL'       
  15.     GROUP BY DIR_VIENTO_TXT ORDER BY COUNT(*) DESC
  16.  
  17.     IF @cuenta = 1
  18.     BEGIN
  19.         SET @moda = NULL
  20.     END
  21.    
  22.  
  23.     RETURN @moda
  24. END

Saludos.
  #4 (permalink)  
Antiguo 15/03/2016, 17:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Funciones Escalares en SQL SERVER

Los campos de tipo FECHA se comparan con >= y <=, yo haria este cambio en tu WHERE

DIR_VIENTO_TXT IS NOT NULL
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 16/03/2016, 11:58
Avatar de joiscafo  
Fecha de Ingreso: noviembre-2012
Mensajes: 31
Antigüedad: 12 años
Puntos: 0
Respuesta: Funciones Escalares en SQL SERVER

Saludos, gracias por sus sugerencias las tomare en cuenta para mejorar el código ya que también tendré que ir creciendolo para en ves de que si da 1 en el if llame a otra función para hacer otro calculo.

Etiquetas: server
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:39.