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

[SOLUCIONADO] Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

Estas en el tema de Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro. en el foro de SQL Server en Foros del Web. Buen dia a todos, mi duda es la siguiente ya tengo toda mi consulta en SQL, soy primerisa y gracias al foro e logrado muchas ...
  #1 (permalink)  
Antiguo 11/11/2013, 10:45
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 10 años, 5 meses
Puntos: 2
Pregunta Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

Buen dia a todos, mi duda es la siguiente ya tengo toda mi consulta en SQL, soy primerisa y gracias al foro e logrado muchas cosas pero ahora no me queda claro lo que es HAVING pues lo quiero utilizar para filtrar datos duplicados por numero de cuenta pero la columna "Codigo" es diferente no se si ahi me cree complicaciones anexo mi codigo y una imagen de la informacion que arroja la consulta.
Que opinan o que me recomiendan.




Código SQL:
Ver original
  1. SELECT DISTINCT Nombre,Codigo,NumCta,isnull(cargo,0) AS cargo, isnull(abono,0) AS abono  FROM
  2.     (
  3.     SELECT CTA.Nombre AS Nombre,S.Codigo AS Codigo,CTA.Codigo AS NumCta, SUM(CASE WHEN TipoMovto = 0 THEN Importe END) AS Cargo,
  4.     SUM(CASE WHEN TipoMovto = 1 THEN Importe END) AS Abono
  5.     FROM MovimientosPoliza AS M
  6.     INNER JOIN Cuentas Cta ON Cta.Id = M.IdCuenta INNER JOIN SegmentosNegocio S ON Cta.Id = M.IdCuenta
  7.     GROUP BY CTA.Nombre,Cta.Codigo,S.Codigo
  8.     ) AS MovimientosPoliza;

[/CODE]

LINK`S donde se aprecian los datos de la consulta.


"COMO SE OBSERVA EN LA IMAGEN LOS DATOS SON IDENTICOS PERO SOLO NECESITO UNO POR NUMERO DE CUENTA".
De igual forma deseo saber si el HAVING es buena opcion para lo que deseo o mejor utilizo otra sentencia.


[URL="http://www.mediafire.com/view/vfkhk8hh4z7z4ll/Captura_de_pantalla_2013-11-11_09.39.13.png"]http://www.mediafire.com/view/vfkhk8hh4z7z4ll/Captura_de_pantalla_2013-11-11_09.39.13.png[/URL]

[URL="http://www.mediafire.com/view/0r1mdhgtjsxr7qg/Captura_de_pantalla_2013-11-11_09.39.23.png"]http://www.mediafire.com/view/0r1mdhgtjsxr7qg/Captura_de_pantalla_2013-11-11_09.39.23.png[/URL]

De ante mano muchas gracias
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #2 (permalink)  
Antiguo 11/11/2013, 10:51
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

si nada mas necesitas uno por numero de cuenta podrias usar como bien dices having o row number ya depende de lo que necesites :)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 11/11/2013, 11:20
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 10 años, 5 meses
Puntos: 2
Pregunta Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

Cita:
Iniciado por Libras Ver Mensaje
si nada mas necesitas uno por numero de cuenta podrias usar como bien dices having o row number ya depende de lo que necesites :)

saludos!
Tendras alguna pagina donde me explique sobre having y row number es que ya busque mucha informacion y solo veo donde usan operadores y simplemente deseo filtrar pero que me siga apareciendo toda la informaciòn.
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #4 (permalink)  
Antiguo 11/11/2013, 11:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT Nombre,Codigo,NumCta,isnull(cargo,0) AS cargo, isnull(abono,0) AS abono, ROW_NUMBER() OVER(partition BY codigo ORDER BY codigo ASC) AS rn  FROM
  3.     (
  4.     SELECT CTA.Nombre AS Nombre,S.Codigo AS Codigo,CTA.Codigo AS NumCta, SUM(CASE WHEN TipoMovto = 0 THEN Importe END) AS Cargo,
  5.     SUM(CASE WHEN TipoMovto = 1 THEN Importe END) AS Abono
  6.     FROM MovimientosPoliza AS M
  7.     INNER JOIN Cuentas Cta ON Cta.Id = M.IdCuenta INNER JOIN SegmentosNegocio S ON Cta.Id = M.IdCuenta
  8.     GROUP BY CTA.Nombre,Cta.Codigo,S.Codigo
  9.     ) AS MovimientosPoliza
  10. ) AS t1 WHERE rn=1

prueba ese codigo y comentas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 11/11/2013, 11:53
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 10 años, 5 meses
Puntos: 2
De acuerdo Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

:D LISTO SOLO HICE UNOS CAMBIOS SOLO UNA ULTIMA DUDA LA NUEVA COLUMNA M QUE SIGNIFICA?
ANEXO EL CODIGO Y LA IMAGEN :D MUCHAS GRACIAS AMIGO <3



[URL="http://www.mediafire.com/view/xcf35caxtyvymcd/Captura_de_pantalla_2013-11-11_10.54.02.png"]http://www.mediafire.com/view/xcf35caxtyvymcd/Captura_de_pantalla_2013-11-11_10.54.02.png[/URL]


Código SQL:
Ver original
  1. SELECT * FROM(
  2.     SELECT Nombre,Codigo,NumCta,isnull(cargo,0) AS cargo, isnull(abono,0) AS abono, ROW_NUMBER() OVER(partition BY Codigo,NumCta ORDER BY Codigo,NumCta ASC) AS rn  FROM
  3.         (
  4.         SELECT CTA.Nombre AS Nombre,S.Codigo AS Codigo,CTA.Codigo AS NumCta, SUM(CASE WHEN TipoMovto = 0 THEN Importe END) AS Cargo,
  5.         SUM(CASE WHEN TipoMovto = 1 THEN Importe END) AS Abono
  6.         FROM MovimientosPoliza AS M
  7.         INNER JOIN Cuentas Cta ON Cta.Id = M.IdCuenta INNER JOIN SegmentosNegocio S ON Cta.Id = M.IdCuenta
  8.         GROUP BY CTA.Nombre,Cta.Codigo,S.Codigo
  9.         ) AS MovimientosPoliza
  10.     ) AS t1 WHERE rn=1
[/CODE]
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.

Última edición por gnzsoloyo; 11/11/2013 a las 13:26
  #6 (permalink)  
Antiguo 11/11/2013, 11:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

columna m?? es columna RN y singnifica el numero de renglon, si investigaste un poco sobre row number veras que la funcion te ordena los registros y asigna un numero de renglon dependiendo de la particion que le indiques(en este caso para cada registro de codigo N le corresponde una numeracion del 1 al N digamos si tienes 2 registros con codigo 1 y otros 3 con codigo 2 entonces tendras 5 registros con sus respectivos rn en 1,2 y 1,2,3 el query lo que hace es obtener el primero de estos registros)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 11/11/2013, 12:04
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 10 años, 5 meses
Puntos: 2
De acuerdo Respuesta: Nueva duda en SQL tal vez sea muy sencilla pero no me queda claro.

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT Nombre,Codigo,NumCta,isnull(cargo,0) AS cargo, isnull(abono,0) AS abono, ROW_NUMBER() OVER(partition BY codigo ORDER BY codigo ASC) AS rn  FROM
  3.     (
  4.     SELECT CTA.Nombre AS Nombre,S.Codigo AS Codigo,CTA.Codigo AS NumCta, SUM(CASE WHEN TipoMovto = 0 THEN Importe END) AS Cargo,
  5.     SUM(CASE WHEN TipoMovto = 1 THEN Importe END) AS Abono
  6.     FROM MovimientosPoliza AS M
  7.     INNER JOIN Cuentas Cta ON Cta.Id = M.IdCuenta INNER JOIN SegmentosNegocio S ON Cta.Id = M.IdCuenta
  8.     GROUP BY CTA.Nombre,Cta.Codigo,S.Codigo
  9.     ) AS MovimientosPoliza
  10. ) AS t1 WHERE rn=1

prueba ese codigo y comentas :)
Cita:
Iniciado por Libras Ver Mensaje
columna m?? es columna RN y singnifica el numero de renglon, si investigaste un poco sobre row number veras que la funcion te ordena los registros y asigna un numero de renglon dependiendo de la particion que le indiques(en este caso para cada registro de codigo N le corresponde una numeracion del 1 al N digamos si tienes 2 registros con codigo 1 y otros 3 con codigo 2 entonces tendras 5 registros con sus respectivos rn en 1,2 y 1,2,3 el query lo que hace es obtener el primero de estos registros)

saludos!

MUCHAS GRACIAS AMIGO :3 YAYAYA ENTENDI ME LO IMAGINE PERO ME DEJE LLEVAR POR LA DIFERENCIA ENTRE RN Y M XD OSEA LA LETRA SIMPLEMENTE SEGUIRE LEYENDO MAS Y HACIENDO MAS EJERCICIOS CON HAVING Y ROW NUMBER, EN VERDAD GRACIAS NOS VEMOS.
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.

Etiquetas: queda, select, sencilla, sql, vez
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:57.