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

Ciclos en select SQL

Estas en el tema de Ciclos en select SQL en el foro de SQL Server en Foros del Web. Buenas tardes a todos, tengo un problemita que tengo en SQL Server, requiero hacer lo siguiene: cada vez que encuentre la palabra "Inicio" de la ...
  #1 (permalink)  
Antiguo 20/12/2015, 06:00
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Ciclos en select SQL

Buenas tardes a todos,
tengo un problemita que tengo en SQL Server, requiero hacer lo siguiene: cada vez que encuentre la palabra "Inicio" de la columna Nombre empiece a enumerar, es decir, que el primer "Inicio" que encuentre sería 1, las siguientes filas sería 1 y cambiaría hasta que encuentre el siguiente "Inicio" y el número sería 2.
Quedaría de la siguiente manera:
ID Act Nombre
1 Inicio 111
1 Mover 111
1 Bajar 111
1 Termina 111
2 Inicio 999
2 Mover 999
2 Termina 999

Sé que se podría con un ciclo (while) pero no se me permite realizar ciclos solo selects. Alquien tiene una manera de resolverlos o algunas ideas de como realizarlo.
De antemano gracias.
  #2 (permalink)  
Antiguo 21/12/2015, 15:25
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: Ciclos en select SQL

¿Que versión, edición?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 22/12/2015, 17:04
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ciclos en select SQL

Es para Microsoft SQL Server 2012
  #4 (permalink)  
Antiguo 23/12/2015, 09:31
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: Ciclos en select SQL

Esos son todas las columnas que tienes, no tienes un campo fecha o algo asi???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 23/12/2015, 13:05
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ciclos en select SQL

Cita:
Iniciado por Libras Ver Mensaje
Esos son todas las columnas que tienes, no tienes un campo fecha o algo asi???
Tengo la columna de fecha, un indentificador de cada proceso.

Id | Act |Fecha
1 |Start |
2 |Mover |
3 |Bajar |
4 |Termina |
5 |Start |
5 |Mover |
6 |Termina |
...
  #6 (permalink)  
Antiguo 23/12/2015, 13:13
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: Ciclos en select SQL

y el campo fecha que valores tiene? si lo tienes con una fecha creo que es posible usar alguna de las funciones de sql server, otra pregunta, repites los valores de nombre, estos se repiten???

Podrias usar esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT IDENTITY(1,1),
  4. valor VARCHAR(20),
  5. valor1 INT
  6. )
  7. INSERT INTO #temp VALUES ('Inicio', 111)
  8. INSERT INTO #temp VALUES ('Mover', 111)
  9. INSERT INTO #temp VALUES ('Bajar', 111)
  10. INSERT INTO #temp VALUES ('Termina', 111)
  11. INSERT INTO #temp VALUES ('Inicio', 999)
  12. INSERT INTO #temp VALUES ('mover', 999)
  13. INSERT INTO #temp VALUES ('Termina', 999)
  14. INSERT INTO #temp VALUES ('Inicio', 888)
  15. INSERT INTO #temp VALUES ('mover', 888)
  16. INSERT INTO #temp VALUES ('Inicio', 222)
  17.  
  18.  
  19. SELECT *, dense_rank() OVER(ORDER BY valor1) AS col FROM #temp ORDER BY id

Y da como resultado esto:

id valor valor1 col
1 Inicio 111 1
2 Mover 111 1
3 Bajar 111 1
4 Termina 111 1
5 Inicio 999 4
6 mover 999 4
7 Termina 999 4
8 Inicio 888 3
9 mover 888 3
10 Inicio 222 2


o puedes usar esto:

Código SQL:
Ver original
  1. SELECT t1.*,campo FROM #temp AS t1 LEFT JOIN
  2. (
  3. SELECT DENSE_RANK() OVER(ORDER BY id) AS campo,valor,valor1,id FROM #temp WHERE valor='inicio'
  4. ) AS t2 ON (t1.id=t2.id)

donde da como resultado esto:

id valor valor1 campo
1 Inicio 111 1
2 Mover 111 NULL
3 Bajar 111 NULL
4 Termina 111 NULL
5 Inicio 999 2
6 mover 999 NULL
7 Termina 999 NULL
8 Inicio 888 3
9 mover 888 NULL
10 Inicio 222 4
__________________
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; 23/12/2015 a las 15:37
  #7 (permalink)  
Antiguo 23/12/2015, 18:20
 
Fecha de Ingreso: diciembre-2015
Mensajes: 5
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ciclos en select SQL

Cita:
Iniciado por Libras Ver Mensaje
y el campo fecha que valores tiene? si lo tienes con una fecha creo que es posible usar alguna de las funciones de sql server, otra pregunta, repites los valores de nombre, estos se repiten???

Podrias usar esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT IDENTITY(1,1),
  4. valor VARCHAR(20),
  5. valor1 INT
  6. )
  7. INSERT INTO #temp VALUES ('Inicio', 111)
  8. INSERT INTO #temp VALUES ('Mover', 111)
  9. INSERT INTO #temp VALUES ('Bajar', 111)
  10. INSERT INTO #temp VALUES ('Termina', 111)
  11. INSERT INTO #temp VALUES ('Inicio', 999)
  12. INSERT INTO #temp VALUES ('mover', 999)
  13. INSERT INTO #temp VALUES ('Termina', 999)
  14. INSERT INTO #temp VALUES ('Inicio', 888)
  15. INSERT INTO #temp VALUES ('mover', 888)
  16. INSERT INTO #temp VALUES ('Inicio', 222)
  17.  
  18.  
  19. SELECT *, dense_rank() OVER(ORDER BY valor1) AS col FROM #temp ORDER BY id

Y da como resultado esto:

id valor valor1 col
1 Inicio 111 1
2 Mover 111 1
3 Bajar 111 1
4 Termina 111 1
5 Inicio 999 4
6 mover 999 4
7 Termina 999 4
8 Inicio 888 3
9 mover 888 3
10 Inicio 222 2


o puedes usar esto:

Código SQL:
Ver original
  1. SELECT t1.*,campo FROM #temp AS t1 LEFT JOIN
  2. (
  3. SELECT DENSE_RANK() OVER(ORDER BY id) AS campo,valor,valor1,id FROM #temp WHERE valor='inicio'
  4. ) AS t2 ON (t1.id=t2.id)

donde da como resultado esto:

id valor valor1 campo
1 Inicio 111 1
2 Mover 111 NULL
3 Bajar 111 NULL
4 Termina 111 NULL
5 Inicio 999 2
6 mover 999 NULL
7 Termina 999 NULL
8 Inicio 888 3
9 mover 888 NULL
10 Inicio 222 4
Hola, gracias por contestar, desconocia la función de dense_rank(), pero resulta que no tengo una columna que se repita y con la cual podría agrupar como los valores 111 y 222 que pones de ejemplo.
Lo que estoy estoy realizando es lo siguiente:

Código SQL:
Ver original
  1. SELECT nes.ProcessStart
  2.     ,nes.ProceesEnd
  3.     ,h.*
  4. FROM temp h
  5. LEFT JOIN (
  6.     SELECT nh3.id ProcessStart
  7.         ,ne2.id ProceesEnd
  8.         ,nh3.Row2 RowStart
  9.         ,ne2.ROW RowEnd
  10.  
  11.     FROM (
  12.         SELECT ROW_NUMBER() OVER(ORDER BY nh2.ROW)Row2
  13.             ,nh2.*
  14.         FROM (
  15.             SELECT ROW_NUMBER() OVER(ORDER BY nh.ID)ROW
  16.                 ,nh.*
  17.             FROM temp nh
  18.  
  19.         )nh2
  20.         WHERE nh2.valor = 'Inicio'
  21.     )nh3
  22.     LEFT JOIN (
  23.         SELECT ROW_NUMBER() OVER(ORDER BY ne.ROW) Row2
  24.         ,ne.* FROM (
  25.             SELECT ROW_NUMBER() OVER(ORDER BY nh.ID)ROW
  26.                 ,nh.*
  27.             FROM temp nh
  28.  
  29.         )ne
  30.         WHERE ne.valor = 'Inicio'
  31.     )ne2 ON (ne2.Row2) = nh3.Row2+1
  32. )nes ON nes.ProcessStart <= h.ID
  33.     AND (nes.ProceesEnd > h.ID OR nes.ProceesEnd IS NULL)
El query que estoy realizando agrupa bien siempre y cuando esten ordenados, es decir, sea de inicia, mover, bajar, terminar, pero no cuando se dos procesos inician la misma veces, así inicio, inicio, mover....
  #8 (permalink)  
Antiguo 24/12/2015, 09:17
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: Ciclos en select SQL

Entonces podrias poner un ejemplo real de tus datos? porque los datos que pones si no son los reales entonces no sirven.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: ciclos, select, server, sql
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:27.