jueves, 10 de julio de 2014

Consultas SQL para numerar filas y contar repeticiones

Sumar  un total de registros que no tienen una columna  cantidad

SELECT SUM(rn) as Total FROM (  SELECT a.proyecto, ROW_NUMBER() OVER(PARTITION BY a.idalumno,a.idproyecto,a.proyecto ORDER BY a.proyecto  DESC)rn from proyectos as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno  INNER JOIN Carreras as c on b.carrera=c.idCarrera  where  a.Ano='2014' )a WHERE rn = 1 ;

Numeras registros
SELECT   rank() OVER (ORDER BY  b.nombre,a.idproyecto,a.idproyecto) as idproyecto, a.idalumno, b.nombre,c.nombre  as carrera, a.proyecto, a.organismo, a.periodo, a.ano as Año, a.Horas,d.estado as Estado_Proyecto FROM  Proyectos as a  INNER JOIN Alumnos as b on a.idalumno=b.idalumno INNER JOIN Carreras as c on b.carrera=c.idCarrera  INNER JOIN EstadosProyectos  as d on a.EstadoProyecto=d.id where  a.Ano='2014'  ORDER BY  b.nombre;

//Alumnos que presentaron proyectos
SELECT SUM(rn) as Total FROM (SELECT  ROW_NUMBER() OVER(PARTITION BY a.idAlumno ORDER BY a.idAlumno DESC) rn from proyectos  as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno  INNER JOIN Carreras as c on b.carrera=c.idCarrera where  a.Ano='2014' )a WHERE rn = 1;

//Total de proyectos del año 2014
SELECT SUM(rn) as Total FROM (  SELECT a.proyecto, ROW_NUMBER() OVER(PARTITION BY a.idalumno,a.idproyecto,a.proyecto ORDER BY a.proyecto  DESC)rn from proyectos as a INNER JOIN Alumnos as b on a.idAlumno=b.idalumno
 INNER JOIN Carreras as c on b.carrera=c.idCarrera  where  a.Ano='2014' )a WHERE rn = 1 ;

sábado, 21 de junio de 2014

Stored Procedure que imprime un Rango de numeros obtenidos de una tabla


Se trata de un procedimiento  almacenado que obtiene dos números de una tabla y que consta de 
las columna  numero1, numero2  e IdFila que es la clave primaria, misma que se envía como parámetro al procedimiento almacenado e imprime el rango  que existe entre estos dos números.



--Creando procedimiento
CREATE PROCEDURE  ObtenNumerosRango
@Fila int
   AS
BEGIN  
DECLARE @N1 int,@N2 int;
  SET @N1 = (Select cast(Numero1 as int)Numero1 from  tblNumeros where idFila=@Fila);
  SET @N2 =(Select cast(Numero2 as int)Numero2 from  tblNumeros where idFila=@Fila);
   
   WHILE @N1<=@N2
   BEGIN
      PRINT'Numero :):'+convert(varchar(3),@N1);
       Select @N1=@N1+1;
   END; 
END
--Llamando al procedimiento
DECLARE @Fila int=6;
Execute ObtenNumerosRango 6;