none
enumerar filas de consulta: RRS feed

  • Pregunta

  • hola  quiero que mi consulta enumero registro por registro

    enumeracion nombre

    1                      maicol

    2                        alex

    3                       edu

     

    por lo que e leido se puede con el 

     ROW_NUMBER() OVER (ORDER BY nombre desc ) as fila

    pero no quiero que la enumeración depende de un orden especifico

    simplemente cuando se realice la consulta . lo enumere

     


    maicol8k
    jueves, 24 de noviembre de 2011 16:36

Respuestas

  • with mycte as (
    SELECT bd_alum .[APELLIDOS Y NOMBRES] , PUNTAJE=SUM(PROM_FINAL)  FROM  EVALUACION 
     
      INNER JOIN   bd_alum  ON EVALUACION .COD_ALUM = bd_alum .COD_ALUM 
     
      group by   bd_alum .[APELLIDOS Y NOMBRES] 
     )
    
    select *, row_number() over( order by puntaje desc) 
    select * from mycte
      ORDER BY    PUNTAJE   desc
    


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    • Marcado como respuesta ApreSabi viernes, 25 de noviembre de 2011 0:17
    jueves, 24 de noviembre de 2011 22:06
    Moderador

Todas las respuestas

  • El numero siempre depende de algun orden. Si buscas algo tipo como en oracle seria ROWNUM no podes
    Lic. Andrés M. Aiello | DBA MS SQL - Oracle | http://aiellodba.blogspot.com | @AndresAiello
    jueves, 24 de noviembre de 2011 16:39
  • No se puede, siempre hay que definir un orden.
    jueves, 24 de noviembre de 2011 16:39
  • ok entonces

    SELECT  ROW_NUMBER() OVER (ORDER BY PUNTAJE  desc ) as fila,evaluacion.cod_alum,bd_alum.[APELLIDOS Y NOMBRES] ,  PUNTAJE=SUM(PROM_FINAL)

     

    si lo deseo ordenar por el puntaje que es un campo calculado me sale error que puntaje no pertenece a la tabla


    maicol8k
    jueves, 24 de noviembre de 2011 16:43
  • Puedes crearte una CTE y luego ya usar ROW_NUMBER sobre una columna, aunque sea calculada, de dicha cte. Por ejemplo:

    USE AdventureWorks
    GO
    
    ; WITH cte AS (SELECT COUNT(*) AS #, customerid FROM sales.SalesOrderHeader GROUP BY CustomerID)
    SELECT ROW_NUMBER() OVER (ORDER BY #) AS rn, * FROM cte
    


    jueves, 24 de noviembre de 2011 16:47
  • puedes poner order by newid()

     

    select *, ROW_NUMBER() over(order by newid()) from INFORMATION_SCHEMA.TABLES
    

    el orden existe.. pero es aleatorio o irrelevante.

     


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    jueves, 24 de noviembre de 2011 17:19
    Moderador
  • Estaba por poner otra forma para obtener un orden "cualquiera"

    Select

    ROW_NUMBER() OVER (ORDER BY (SELECT 1)),*

    from tu_tabla


    Lic. Andrés M. Aiello | DBA MS SQL - Oracle | http://aiellodba.blogspot.com | @AndresAiello
    jueves, 24 de noviembre de 2011 17:25
  • NO ME RESULTA... SALE DE FORMA DESORDENADA 
    ALGUNA OTRA OPCION 
    SELECT ROW_NUMBER() over(order by newid())AS NUMERACION, bd_alum .[APELLIDOS Y NOMBRES] , PUNTAJE=SUM(PROM_FINAL)  FROM  EVALUACION 
      INNER JOIN   bd_alum  ON EVALUACION .COD_ALUM = bd_alum .COD_ALUM 
      group by   bd_alum .[APELLIDOS Y NOMBRES] 
      ORDER BY    PUNTAJE   , 

    maicol8k
    jueves, 24 de noviembre de 2011 20:38
  • Hola.

    Por favor, indica qué resultado esperas obtener. Te hemos comentado cómo obtenerlo ordenado o de forma aleatoria y ninguna de las dos formas te ha servido.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    jueves, 24 de noviembre de 2011 20:51
    Moderador
  • TABLA EVALUACION( ACA SE JUNTA AL ALUMNO,PROGRAMACION Y EVALUACION)

    id_evaluacion,idprogramacion,id_alumno,n1,n2,p1,n3,n4,p2,prom

    4                        1                      014554  12,13,13,12,12,12,13

    2                        2                      014554  14,14,14,12,12,12,13 

    3                        3                      014554   11,11,11,12,12,12,12 

    4                        1                      014514  12,13,13,12,12,12,13

    2                        2                      014514  12,12,12,12,12,12,12 

    3                        3                      014514   11,11,11,12,12,12,12    

    TABLA PROGRAMACION ( PROGRAMACION CON SU ASIGNATURA) Lo

    importante es el tipo .. cuando solo se suma en los promedios los del tipo 1

    id_PROGRAMACION,id_ASIGNATURA,semestre,CICLO,TURNO,TIPO

    1                        1                      ,1,VI , N , 1

    2                        2                     ,1, VI , N , 1 

    3                       3                     ,1,VI ,N  , 0  

     

    mostre partes de mi tabla programacion y evaluacion

    lo que necesito es el puntaje  por alumno y su promedio ponderado osea la sumatoria de los promedios de las asignaturas cuyo programacion sea del tipo 1, y que me enumere el puesto de merito

    Resultado esperado:

    puesto / id_alum   / puntaje / promedio

    1         /   014554  / 26 /            13

    2        /    014514  / 25 /              12.5

     

    bueno ese es todo sql server 2008

     


    maicol8k
    jueves, 24 de noviembre de 2011 21:56
  • with mycte as (
    SELECT bd_alum .[APELLIDOS Y NOMBRES] , PUNTAJE=SUM(PROM_FINAL)  FROM  EVALUACION 
     
      INNER JOIN   bd_alum  ON EVALUACION .COD_ALUM = bd_alum .COD_ALUM 
     
      group by   bd_alum .[APELLIDOS Y NOMBRES] 
     )
    
    select *, row_number() over( order by puntaje desc) 
    select * from mycte
      ORDER BY    PUNTAJE   desc
    


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    • Marcado como respuesta ApreSabi viernes, 25 de noviembre de 2011 0:17
    jueves, 24 de noviembre de 2011 22:06
    Moderador
  • excelente ...  pero no me sale para visualizar el promedio

     with mycte as (
    SELECT bd_alum .COD_ALUM , bd_alum .[APELLIDOS Y NOMBRES],PUNTAJE=SUM(PROM_FINA),promedio= ROUND((sum(PROM_FINA))/(SELECT COUNT(*) FROM EVALUACION
    INNER JOIN PROGRAMACION ON EVALUACION.ID_PROGRAMACION=PROGRAMACION.ID_PROGRAMACION INNER JOIN crono_actividades ON PROGRAMACION.id_crono=crono_actividades.ID_CRONO INNER JOIN INICIO ON CRONO_ACTIVIDADES.ID_INICIO=INICIO.ID_INICIO WHERE PROM_FINAL IS NOT NULL AND PROM_FINAL < =20 AND PROGRAMACION.TIPO=1 AND INICIO.ESTADO='TRUE'),2)from evaluacion INNER JOIN bd_alum ON EVALUACION .COD_ALUM = bd_alum .COD_ALUM inner join PROGRAMACION on EVALUACION .ID_PROGRAMACION = PROGRAMACION .ID_PROGRAMACION inner join crono_actividades on PROGRAMACION .ID_CRONO = crono_actividades .id_crono inner join INICIO on INICIO .ID_INICIO = crono_actividades .id_inicio where PROGRAMACION .CICLO ='II' and programacion.TURNO ='M' and PROGRAMACION.ID_ESPECIALIDAD =1 and inicio.id_inicio =2 and PROGRAMACION .ID_SEDE =1 and PROM1 <= 20 AND PROGRAMACION .SECCION ='A' group by bd_alum .[APELLIDOS Y NOMBRES] ,bd_alum .COD_ALUM ) select *, row_number() over( order by puntaje desc)as puesto from mycte ORDER BY PUNTAJE desc


    por lo demas ok .. lo que sale hasta el momento .. que le digo

    digamos que una especialidad de tal ciclo de tal turno pueda tener 7 de programacion de tipo 1 .. entonces el promedio final seria divido entre puntaje/ cantidad de programacion tipo1 .... pero hay un problemas .. puede haber alumnos que no llevan todas las asignaturas de ese ciclo entonces.. eso no contaria .. entonces tendria que contar todos los codigos del alumno que estan en la tabla evaluacion..  de la programaicion que cumpla  la especialidad, ciclo,turno,..... y dividirlos con su puntaje alcanzado

     


    maicol8k
    viernes, 25 de noviembre de 2011 0:07
  • Maico, cierra este tema y abre otro, si no será un lio seguir todo lo que pide. En el otro tema pon un script sobre como simular tus datos ( script de creación de las tablas y para rellenarlos) y dinos lo que obtienes y lo que esperas. De otra forma es muy complicado ayudarte, no solo hay que saber SQL sino conocer tu estructura y algunas veces adivinar lo que nos pides :).

    Si nos pones scripts y cada tema lo pones en un hilo.. nos será mas sencillo

     


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA
    viernes, 25 de noviembre de 2011 0:13
    Moderador
  • ok  cerrare el tema pues la pregunta fue sobre como enumerar ... 

    pero el resultado esperado lo especifique mas arriba

    Resultado esperado:

    puesto / id_alum   / puntaje / promedio

    1         /   014554  / 26 /            13

    2        /    014514  / 25 /              12.5

    bueno gracias y replanteare la pregunta..  saludos


    maicol8k
    viernes, 25 de noviembre de 2011 0:15