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

[SOLUCIONADO] La subconsulta ha devuelto más de un valor

Estas en el tema de La subconsulta ha devuelto más de un valor en el foro de SQL Server en Foros del Web. buenas tengo una funcion que envia como parametros 2 fechas y tengo este calculo case when VE.Interno=0 then (select (TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE ...
  #1 (permalink)  
Antiguo 26/03/2013, 07:54
Avatar de chris225  
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 2
La subconsulta ha devuelto más de un valor

buenas tengo una funcion que envia como parametros 2 fechas y tengo este calculo

case when VE.Interno=0
then
(select (TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('NC','NB','NU') and NUMFACTNC=TD.NRODCTO),0)) *
(SELECT (PorcReca/100)FROM GS_Recaudo where (DATEDIFF(day, @pfecha,@pfecha1) between Desde and Hasta))
* (select (PorcReca/100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON)
from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
left JOIN ABONOS AS AB on AB.FACTURA=TD.NRODCTO AND AB.TIPODCTOCA=TD.TIPODCTO
where TD.TIPODCTO in ('FU','FB','FC') and TD.CODCC=VE.CCOSTOS
group by TD.BRUTO,TD.NRODCTO,VE.NOMESCALAFON--,TD.CODVEN,TD.TIPODCTO,VE.Interno
having sum(AB.VALOR)>=TD.BRUTO)
else
(Select (TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('FC') and NUMFACTNC=TD.NRODCTO),0))
* (select (PorcReca / 100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON) from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
where TD.TIPODCTO IN ('FC') and TD.CODVEN=VE.CODVEN) end as total

pero me sale este error cuando ejecuto la funcion

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

pero cuando ejecuto ese calculo aparte solo me trae una fila de datos entonces no se que hacer
  #2 (permalink)  
Antiguo 26/03/2013, 09:04
Avatar de chris225  
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: La subconsulta ha devuelto más de un valor

me he fijado cuando hago el case me devuelve 2 datos cuando solo debe devolver solo uno osea me ejecuta las 2 consultas a la vez por eso me tira error
  #3 (permalink)  
Antiguo 26/03/2013, 09:19
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: La subconsulta ha devuelto más de un valor

tus querys solo regresan "1" valor?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 26/03/2013, 09:26
Avatar de chris225  
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: La subconsulta ha devuelto más de un valor

Cita:
Iniciado por Libras Ver Mensaje
tus querys solo regresan "1" valor?
tienen que regresar un valor la he modificado y ya se esta arreglando asi la tengo de momento

case when VE.Interno=0
then
(select top 1(TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('NC','NB','NU') and NUMFACTNC=TD.NRODCTO),0)) *
(SELECT (PorcReca/100)FROM GS_Recaudo where (DATEDIFF(day, @pfecha,@pfecha1) between Desde and Hasta))
* (select (PorcReca/100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON)
from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
left JOIN ABONOS AS AB on AB.FACTURA=TD.NRODCTO AND AB.TIPODCTOCA=TD.TIPODCTO
where TD.TIPODCTO in ('FU','FB','FC') and TD.CODCC=VE.CCOSTOS and VE.Interno=@pinterno
group by TD.BRUTO,TD.NRODCTO,VE.NOMESCALAFON--,TD.CODVEN,TD.TIPODCTO,VE.Interno
having sum(AB.VALOR)>=TD.BRUTO)
else
case when VE.Interno=1
then
(Select top 1(TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('FC') and NUMFACTNC=TD.NRODCTO),0))
* (select (PorcReca / 100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON) from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
where TD.TIPODCTO IN ('FC') and TD.CODVEN=VE.CODVEN and VE.Interno=@pinterno) end end as total
from venden as VE, Trade as TD where (TD.FECHA >= @pfecha) AND (TD.FECHA1 <= @pfecha1) and VE.Interno=@pinterno
  #5 (permalink)  
Antiguo 26/03/2013, 09:42
Avatar de chris225  
Fecha de Ingreso: octubre-2012
Ubicación: Medellin
Mensajes: 149
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: La subconsulta ha devuelto más de un valor

ya lo arregle muchas gracias de todas maneras por la ayuda aca les paso las funciones que hice

este es el que calcula

SELECT DISTINCT
case when VE.Interno=0
then
(select top 1(TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('NC','NB','NU') and NUMFACTNC=TD.NRODCTO),0)) *
(SELECT (PorcReca/100)FROM GS_Recaudo where (DATEDIFF(day, @pfecha,@pfecha1) between Desde and Hasta))
* (select (PorcReca/100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON)
from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
left JOIN ABONOS AS AB on AB.FACTURA=TD.NRODCTO AND AB.TIPODCTOCA=TD.TIPODCTO
where TD.TIPODCTO in ('FU','FB','FC') and TD.CODCC=VE.CCOSTOS and VE.Interno=@pinterno
group by TD.BRUTO,TD.NRODCTO,VE.NOMESCALAFON--,TD.CODVEN,TD.TIPODCTO,VE.Interno
having sum(AB.VALOR)>=TD.BRUTO)
else
case when VE.Interno=1
then
(Select top 1(TD.BRUTO - isnull((select SUM(CANTIDAD*VALORUNIT) from MVTRADE where TIPODCTONC in ('FC') and NUMFACTNC=TD.NRODCTO),0))
* (select (PorcReca / 100) from GS_ConfEscal where Nombre=VE.NOMESCALAFON) from Trade as TD
inner join GS_Recaudo AS RC on RC.CodeVen = TD.CODVEN
inner join VENDEN AS VE ON VE.CODVEN = RC.CodeVen
where TD.TIPODCTO IN ('FC') and TD.CODVEN=VE.CODVEN and VE.Interno=@pinterno) end end as total
from venden as VE, Trade as TD where (TD.FECHA >= @pfecha) AND (TD.FECHA1 <= @pfecha1) and VE.Interno=@pinterno

y este le envia los parametros

select GS_FN_ConsultarComisiones.CODVEN,sum(comisionconno tacredito)as Comision,Nombre,DiasFactura from GS_FN_ConsultarComisiones (@pfecha,@pfecha1)

Etiquetas: funcion, select, subconsulta, valor
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 08:32.