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

Error en consulta :(

Estas en el tema de Error en consulta :( en el foro de Bases de Datos General en Foros del Web. Esta es mi consulta: select RFC, Nombre, credito from proveedor where Nombre = (select Proveedor from CXP ) al hace la consulta me arroja el ...
  #1 (permalink)  
Antiguo 21/04/2016, 13:25
 
Fecha de Ingreso: abril-2016
Mensajes: 2
Antigüedad: 8 años
Puntos: 0
Pregunta Error en consulta :(

Esta es mi consulta:
select RFC, Nombre, credito from proveedor where Nombre = (select Proveedor from CXP )

al hace la consulta me arroja el siguiente arror:
Msg 512, Level 16, State 1, Line 1
La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.


¿que puede ser?
  #2 (permalink)  
Antiguo 21/04/2016, 13:57
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: Error en consulta :(

Te falta ver mas Bax y leer mas de SQL ....

Código SQL:
Ver original
  1. SELECT RFC, Nombre, credito FROM proveedor WHERE Nombre IN (SELECT Proveedor FROM CXP )
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 21/04/2016, 14:18
 
Fecha de Ingreso: abril-2016
Mensajes: 2
Antigüedad: 8 años
Puntos: 0
Respuesta: Error en consulta :(

Cita:
Iniciado por Libras Ver Mensaje
Te falta ver mas Bax y leer mas de SQL ....

Código SQL:
Ver original
  1. SELECT RFC, Nombre, credito FROM proveedor WHERE Nombre IN (SELECT Proveedor FROM CXP )


esta es mi consulta completa.-

Select Folio,Proveedor, FechaFactura as 'Fecha de Factura', Monto, (select credito from proveedor where Nombre = Proveedor) as Credito,Moneda, '30 Dias' = CASE WHEN datediff(day,FechaFactura,getdate())<= 30 THEN DATEDIFF(DAY, FechaFactura, getdate()) else '0' END,'60 Dias' = CASE WHEN datediff(day,FechaFactura,getdate())>30 and datediff(day,FechaFactura,getdate())<= 60 THEN DATEDIFF(DAY, FechaFactura, getdate()) else '0' END,'90 Dias' = CASE WHEN datediff(day,FechaFactura,getdate())>60 THEN DATEDIFF(DAY, FechaFactura, getdate()) else '0' END from CXP where (FechaFactura BETWEEN '2016-02-01' AND '2016-02-29') AND Pagada = 'No'


pero el problema me da aqui---
Select Folio,Proveedor, FechaFactura as 'Fecha de Factura', Monto, (select credito from proveedor where Nombre = Proveedor) as Credito,.......

lo raro es que cuando consulto del FechaFactura BETWEEN '2016-01-01' AND '2016-01-31' si me arroja informacion
  #4 (permalink)  
Antiguo 21/04/2016, 14:25
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: Error en consulta :(

Lo que puede pasar es que con un rango solo te arroja un proveedor y con otro rango de arroja mas de un provedor, no puedes usar ese tipo de sentencias cuando te regresa mas de un resultado el subquery, lo mejor seria hacerlo de esta manera:

Código SQL:
Ver original
  1. SELECT Folio,t1.Proveedor, FechaFactura AS 'Fecha de Factura', Monto,  t2.Credito,Moneda, '30 Dias' = CASE WHEN datediff(DAY,FechaFactura,getdate())<= 30 THEN DATEDIFF(DAY, FechaFactura, getdate()) ELSE '0' END,'60 Dias' = CASE WHEN datediff(DAY,FechaFactura,getdate())>30 AND datediff(DAY,FechaFactura,getdate())<= 60 THEN DATEDIFF(DAY, FechaFactura, getdate()) ELSE '0' END,'90 Dias' = CASE WHEN datediff(DAY,FechaFactura,getdate())>60 THEN DATEDIFF(DAY, FechaFactura, getdate()) ELSE '0' END FROM CXP AS t1
  2. LEFT JOIN (SELECT credito, proveedor FROM proveedor) AS t2 ON (t1.nombre=t2.proveedor)
  3. WHERE (FechaFactura BETWEEN '2016-02-01' AND '2016-02-29') AND Pagada = 'No'
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: sql-sentencia
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 01:32.