Principales respuestas
SEGUN EL CONTENIDO MUESTRA O NO

Pregunta
-
Estimados, muy buenos días les pido ayuda con lo siguiente.
Tengo la siguiente estructura en mi base de datos
CREATE TABLE [dbo].[CabezalVenta](
[NumeroPedido] [bigint] NOT NULL,
[NumeroDocumento] [bigint] NOT NULL,
[SerieDocumento] [nvarchar](1) NULL,
[Fecha] [date] NULL,
[FechaDeVencimiento] [date] NULL,
[Vendedor] [int] NULL,
[FormaPago] [int] NULL,
[Moneda] [nvarchar](3) NULL,
[TipoDocumentoElectronico] [int] NULL,
[DocumentoCliente] [nvarchar](30) NULL,
[TipoDocumentoCliente] [int] NULL,
[CantidadLineas] [int] NULL,
[IvaMinimo] [float] NULL,
[IvaBasico] [float] NULL,
[MercExenta] [float] NULL,
[MercMinimo] [float] NULL,
[MercBasico] [float] NULL,
[ImporteTotal] [float] NULL,
[SerieCae] [nvarchar](4) NULL,
[NumeroCae] [bigint] NULL,
[SerieReferencia] [nvarchar](4) NULL,
[CaeReferencia] [bigint] NULL,
[NombreCliente] [nvarchar](100) NULL,
[DireccionCliente] [nvarchar](100) NULL,
[CiudadCliente] [nvarchar](50) NULL,
[PaisCliente] [nvarchar](2) NULL,
[CotizacionDolar] [float] NULL,
[Anulada] [bit] NULL,
CONSTRAINT [IX_CabezalVenta_3] UNIQUE NONCLUSTEREDYo necesito traer el valor máximo de NumeroCae siempre que el valor de TipoDocumentoElectronico sea igual a el valor pasado por parámetro (se pasa a veces 101 y a veces 111)
el problema surge al hacer la siguiente consulta ya que si le pongo el valor 101 la consulta es realizada sin problemas pero si le pongo 111 no me trae nada habiendo datos en la tabla.
esta sería la consulta que estoy haciendo
ALTER PROC [dbo].[obtener_numero_cfemax_por_tipocfe]
@tipocfe int
AS
SELECT SerieCae, NumeroCae
FROM CabezalVenta
WHERE TipoDocumentoElectronico=@tipocfe AND NumeroCae=(SELECT max(NumeroCae) FROM CabezalVenta)si pongo 101 anda pero si pongo 111 no
Alguien que me pueda brindar su ayuda ya que no entiendo porque pasa esto
Muchas Gracias y saludos desde uruguay
Marcelo Pírez
Respuestas
-
La expresión condicional también debería estar en la subconsulta, pero podrías evitarla si los resultados lo colocas en memoria:
ALTER PROCEDURE dbo.obtener_numero_cfemax_por_tipocfe @tipocfe int AS BEGIN WITH T AS ( SELECT SerieCae, NumeroCae, ROW_NUMBER() OVER(ORDER BY NumeroCae DESC) AS [Secuencia] FROM CabezalVenta WHERE TipoDocumentoElectronico = @tipocfe ) SELECT SerieCae, NumeroCae FROM T WHERE (Secuencia = 1) END GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Marcelo_UY sábado, 21 de enero de 2017 21:48
Todas las respuestas
-
La expresión condicional también debería estar en la subconsulta, pero podrías evitarla si los resultados lo colocas en memoria:
ALTER PROCEDURE dbo.obtener_numero_cfemax_por_tipocfe @tipocfe int AS BEGIN WITH T AS ( SELECT SerieCae, NumeroCae, ROW_NUMBER() OVER(ORDER BY NumeroCae DESC) AS [Secuencia] FROM CabezalVenta WHERE TipoDocumentoElectronico = @tipocfe ) SELECT SerieCae, NumeroCae FROM T WHERE (Secuencia = 1) END GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Marcado como respuesta Marcelo_UY sábado, 21 de enero de 2017 21:48
-
-
Utilicé una CTE para contener las filas que corresponden con el valor que contiene el parámetro @tipocfe ordenando de manera descendente por la columna [NumeroCae], del conjunto resultante tomo la primera fila que corresponde al valor máximo.
Nota que es lo mismo que la subconsulta que realizas, salvo que en tu código falta la restricción por el valor del parámetro @tipocfe.
ALTER PROCEDURE dbo.obtener_numero_cfemax_por_tipocfe @tipocfe int AS BEGIN SELECT SerieCae, NumeroCae FROM CabezalVenta WHERE TipoDocumentoElectronico = @tipocfe AND NumeroCae = (SELECT MAX(NumeroCae) FROM CabezalVenta WHERE TipoDocumentoElectronico = @tipocfe) END GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.