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

Consulta con Row_Number() y Inner Join

Estas en el tema de Consulta con Row_Number() y Inner Join en el foro de SQL Server en Foros del Web. Hola amigos!! espero que se encuentren bien, me esta surgiendo un problema trabajando con MS SQL Server, ya que generalmente trabajo con MySql. Tengo una ...
  #1 (permalink)  
Antiguo 17/06/2011, 11:27
 
Fecha de Ingreso: julio-2007
Mensajes: 178
Antigüedad: 16 años, 9 meses
Puntos: 1
Consulta con Row_Number() y Inner Join

Hola amigos!! espero que se encuentren bien, me esta surgiendo un problema trabajando con MS SQL Server, ya que generalmente trabajo con MySql.

Tengo una bd de productos, que tengo que paginar en un sitio, para lo cual utilizo la instrucción
Código:
SELECT     *
FROM         (SELECT     *, ROW_NUMBER() OVER (ORDER BY codigo) AS row
FROM         articulo) AS alias
WHERE     row > 0 AND row <= 3000;
y necesito hacer un JOIN parecido a esto
Código:
 INNER JOIN stocks ON articulo.cRef = stocks.cref
Pero verdaderamente lo trato de combinar y formular y no me funciona.. Alguien se le ocurre como conciliar estas dos sentencias?
  #2 (permalink)  
Antiguo 17/06/2011, 11:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con Row_Number() y Inner Join

Hola hermess87:

Creo que podrías hacerlo así:

Código SQL:
Ver original
  1. SELECT *
  2. FROM (
  3. SELECT *, ROW_NUMBER() OVER (ORDER BY A.codigo) ROW
  4. FROM articulo A
  5. INNER JOIN stocks S ON A.cRef = S.cref
  6. ) AS alias
  7. WHERE ROW > 0 AND ROW <= 3000;

Solo como comentario adicional, trata de evitar los select *, en lugar de eso lista los campos que realmente vas a necesitar, esto ayudará considerablemente al rendimiento de las consultas.

Haz la prueba y nos comentas.

Saludos
Leo
  #3 (permalink)  
Antiguo 17/06/2011, 11:52
 
Fecha de Ingreso: julio-2007
Mensajes: 178
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Consulta con Row_Number() y Inner Join

Hola Leonardo! gracias por ayudarme... te comento que estoy intentando la consulta que me recomendaste, pero quza este haciendo algo mal, pues no me esta funcionando correctamente, la misma me quedo de esta manera:

Código:
SELECT     *
FROM         (SELECT     *, ROW_NUMBER() OVER (ORDER BY codigo) row
FROM         articulo INNER JOIN
                      stocks ON articulo.cRef = stocks.cref) AS alias
WHERE     row > 0 AND row <= 3000;
Con respecto a lo que me dices de los campos, usando * , te comento que en realidad solo detallo los campos que necesito, pero para ejemplificarlo mejor aca use el *...


desde ya te agradezco mucho por ayudarme!!
  #4 (permalink)  
Antiguo 17/06/2011, 12:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con Row_Number() y Inner Join

Hola de nuevo hermess87:

Dices que la consulta no te funciona correctamente, pero no nos dices donde está el error, si es un error de sintaxis (no puedes ejecutar la consulta) entonces deberías de comenzar por decirnos qué error es el que está marcando para tratar de corregirlo. Si el problema es que no te regresa los resultados esperados, entonces deberías comenzar por decirnos cuál es la estructura de tus tablas, dar algunos datos de ejemplo y decirnos qué es lo que esperas obtener como salida, ya que sin esta información es imposible adivinar y tratar de ayudarte, la respuesta que di fue un tiro en la oscuridad esperando poder ayudarte, pero lo cierto es que puede tener errores.

Saludos
Leo.
  #5 (permalink)  
Antiguo 17/06/2011, 14:07
 
Fecha de Ingreso: julio-2007
Mensajes: 178
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Consulta con Row_Number() y Inner Join

Hola Amigo, comprendo lo que me dices, verdaderamente fui muy impreciso detallando mi problema... el error que me devolvía era de sintaxis específicamente.

De todas manera un amigo me dio una mano y me acomodo la sentencia de esta manera:

Código:
SELECT     *
FROM (SELECT     ARTICULO.*, ROW_NUMBER() OVER (ORDER BY codigo) AS row
FROM ( articulo INNER JOIN STOCKS ON ARTICULO.CREF = STOCKS.CREF)  ) AS alias
WHERE     row > 0 AND row <= 1500
Por lo tanto el problema esta solucionado... desde ya muchas gracias por tu ayuda y esfuerzo!! Suerte!!

Etiquetas: join
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 16:50.