'SQL Subquery returned more than 1 value. Already using SELECT TOP 1
I'm trying to use this query (I know its a complex one) but I get an error "subquery cannot return more than 1 value". I've already tried using SELECT TOP as you can see...
Here's the query:
DECLARE @estadoCuota SMALLINT = 2
DECLARE @diasMora SMALLINT = (SELECT TOP 1 Valor FROM SAC.Parametros (NOLOCK) WHERE IdParametro = 4)
DECLARE @diasCobranza SMALLINT = (SELECT TOP 1 Valor FROM SAC.Parametros (NOLOCK) WHERE IdParametro = 9)
SELECT TOP 1 cotizacion.NumeroCredito as ID_Credito
,cotizacionCuota.Cuota as Numero_Cuota
,CONVERT(DATE, cotizacionCuota.FechaVencimiento, 103) as Fecha_Vencimiento_Cuota
,cotizacionCuota.Intereses as Interes_Cuota
,cotizacionCuota.Amortizacion as Amortizacion_Cuota
,cotizacionCuota.Monto as Valor_Cuota
,cotizacionCuota.CapitalPendiente as Saldo_Insoluto_Cuota
,(SELECT TOP 1 tipoCuota.Nombre FROM SAC.TipoCuota tipoCuota (NOLOCK) WHERE tipoCuota.IdTipoCuota = producto.IdTipoCuota) as Tipo_Cuota
,(SELECT TOP 1 estadoCuota.Nombre FROM SAC.EstadoCuota estadoCuota (NOLOCK) WHERE estadoCuota.IdEstadoCuota = cotizacionCuota.IdEstadoCuota) as Estado_Cuota
,CASE WHEN (SELECT TOP 1 estadoCuota.IdEstadoCuota FROM SAC.EstadoCuota estadoCuota (NOLOCK) WHERE estadoCuota.IdEstadoCuota = cotizacionCuota.IdEstadoCuota) = @estadoCuota
THEN ISNULL(pagoCuota.InteresMora, 0)
ELSE
CASE WHEN DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()) >= @diasMora
THEN cotizacionCuota.Monto
* (((SAC.fnTraer_Valor_Mora_tramo(cotizacionCuota.Monto)) / 100) / 30)
* DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE())
ELSE 0
END
END as Interes_Mora
,CASE WHEN (SELECT TOP 1 estadoCuota.IdEstadoCuota FROM SAC.EstadoCuota estadoCuota (NOLOCK) WHERE estadoCuota.IdEstadoCuota = cotizacionCuota.IdEstadoCuota) = @estadoCuota
THEN ISNULL(pagoCuota.GastosCobranza, 0)
ELSE
CASE WHEN DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()) > @diasCobranza
THEN SAC.fnTraer_Total_Gastos_Cobranza(cotizacionCuota.Monto)
ELSE 0
END
END as Gastos_Cobranza
,CASE WHEN (SELECT TOP 1 estadoCuota.IdEstadoCuota FROM SAC.EstadoCuota estadoCuota (NOLOCK) WHERE estadoCuota.IdEstadoCuota = cotizacionCuota.IdEstadoCuota) = @estadoCuota
THEN ISNULL(pagoCuota.TotalPagado, 0)
ELSE
(CASE
WHEN (DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()) < @diasCobranza AND DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()) <= @diasMora)
THEN cotizacionCuota.Monto
ELSE
(CASE WHEN DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()) < @diasCobranza
THEN (cotizacionCuota.Monto
* (((SAC.fnTraer_Valor_Mora_tramo(cotizacionCuota.Monto)) / 100) / 30)
* DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()))
+ cotizacionCuota.Monto
ELSE (cotizacionCuota.Monto
* (((SAC.fnTraer_Valor_Mora_tramo(cotizacionCuota.Monto)) / 100) / 30)
* DATEDIFF(dd, cotizacionCuota.FechaVencimiento, GETDATE()))
+ SAC.fnTraer_Total_Gastos_Cobranza(cotizacionCuota.Monto)
+ cotizacionCuota.Monto
END)
END)
END as Total_a_Pagar
FROM SAC.Cotizacion cotizacion (NOLOCK)
INNER JOIN SAC.Producto producto (NOLOCK) on producto.IdProducto = cotizacion.IdProducto
INNER JOIN SAC.CotizacionCuota cotizacionCuota (NOLOCK) on cotizacion.IdCotizacion = cotizacionCuota.IdCotizacion
LEFT JOIN SAC.PagoCuota pagoCuota (NOLOCK) on pagoCuota.IdCotizacionCuota = cotizacionCuota.IdCotizacionCuota
WHERE cotizacion.IdEstadoCotizacion in (9, 10, 11) AND producto.Contabilizar = 1
ORDER BY cotizacion.NumeroCredito, cotizacionCuota.Cuota ASC
but I get this error:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression
I've already tried using SELECT TOP 1 on all my selects...
What should I do? What am I doing wrong?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
