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

[SOLUCIONADO] Sentencia para borrar filas

Estas en el tema de Sentencia para borrar filas en el foro de SQL Server en Foros del Web. Hola a todos ! Tengo el siguiente problema en una tabla SQL Cliente Producto Juan Perez A Juan Perez B Juan Perez C Jorge Godoy ...
  #1 (permalink)  
Antiguo 27/05/2014, 04:00
Avatar de BiPlanet  
Fecha de Ingreso: mayo-2007
Mensajes: 61
Antigüedad: 16 años, 11 meses
Puntos: 0
Pregunta Sentencia para borrar filas

Hola a todos !

Tengo el siguiente problema en una tabla SQL


Cliente Producto

Juan Perez A
Juan Perez B
Juan Perez C

Jorge Godoy A
Jorge Godoy C
Jorge Godoy D
Jorge Godoy E

Carlos Carrizo A
Carlos Carrizo B
Carlos Carrizo C

Roberto Ortega B
Roberto Ortega C
Roberto Ortega D


Cuando un cliente tiene los productos A y B, borrarle solo el B.
En el caso de que el cliente tenga el producto B, pero NO el A, no hacer nada.
En el caso de que el cliente tenga el producto A, pero NO el B, no hacer nada.
Solo borrar la fila completa donde esta el producto B al cliente que solo posea los dos productos (A y B)

No se como hacerlo, me podrían dar una mano?

Desde ya muchas gracias. Saludos.-
  #2 (permalink)  
Antiguo 27/05/2014, 06:50
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Sentencia para borrar filas

Intentaria asi:
Código SQL:
Ver original
  1. WITH T AS
  2. (SELECT *,
  3.     COUNT(CASE WHEN Producto IN ('A','B') THEN 1 END) OVER(Partition BY Cliente) N
  4. FROM    MiTabla)
  5. DELETE
  6. FROM    T
  7. WHERE   N=2
  8.     AND Producto='B';
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #3 (permalink)  
Antiguo 27/05/2014, 07:41
Avatar de BiPlanet  
Fecha de Ingreso: mayo-2007
Mensajes: 61
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Sentencia para borrar filas

Hice un back up de la base de datos para probar en otra pc y aparentemente funciono, pero me salio este mensaje:

Warning: Null value is eliminated by an aggregate or other SET operation.

(65 row(s) affected)



Me podrias decir que significa?
Tengo miedo que me borre la fila en donde no se cumpla esa condicion, saludos y desde ya muchas gracias por la ayuda.-
  #4 (permalink)  
Antiguo 27/05/2014, 08:17
Avatar de BiPlanet  
Fecha de Ingreso: mayo-2007
Mensajes: 61
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Sentencia para borrar filas

Y disculpa mi ignorancia, pero que son las variables T y N ?
  #5 (permalink)  
Antiguo 27/05/2014, 08:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sentencia para borrar filas

No son variables...

Manual de referencia, por favor: http://msdn.microsoft.com/en-us/library/ms175972.aspx
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 29/05/2014, 05:43
Avatar de BiPlanet  
Fecha de Ingreso: mayo-2007
Mensajes: 61
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Sentencia para borrar filas

Muchísimas gracias, aparentemente sirvió, pero me salta la duda de este warning que me salta cuando se termina de ejecutar la sentencia, me podrían decir que significa?

Código SQL:
Ver original
  1. Warning: NULL VALUE IS eliminated BY an aggregate OR other SET operation.
  2.  
  3. (65 ROW(s) affected)
  #7 (permalink)  
Antiguo 29/05/2014, 08:13
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Sentencia para borrar filas

El mensaje es debido a la expresión dentro el Count que devuelve nulos en caso que el Producto es distinto de A o B.
Para que estes más tranquilo utilize la siguiente:
Código SQL:
Ver original
  1. WITH T AS
  2. (SELECT *,
  3.     SUM(CASE WHEN Producto IN ('A','B') THEN 1 ELSE 0 END) OVER(Partition BY Cliente) N
  4. FROM    MiTabla)
  5. DELETE
  6. FROM    T
  7. WHERE   N=2
  8.     AND Producto='B';
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #8 (permalink)  
Antiguo 29/05/2014, 11:17
Avatar de BiPlanet  
Fecha de Ingreso: mayo-2007
Mensajes: 61
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: Sentencia para borrar filas

Muchas gracias !!! No te imaginas del laburito que me salvaste !!
Saludos.-

Etiquetas: filas, sentencia, siguiente, sql, tabla
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:56.