none
Cambiar Cantidad por cero cuando hay registro repetido RRS feed

  • Pregunta

  • Buen dia, tengo dos tablas que estan relacionadas, y para elaborar un reporte he hecho una consulta la cual muestro a continuacion, asi como el script de las tablas.

    CREATE TABLE [dbo].[Cosechaa](
    	[Id_Cosecha] [int] IDENTITY(1,1) NOT NULL,
    	[Cantidad_Cosecha] [float] NULL,
    	[Id_Enfunde] [int] NULL,
     CONSTRAINT [PK_Cosechaa] PRIMARY KEY CLUSTERED 
    (
    	[Id_Cosecha] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    /****** Object:  Table [dbo].[Enfunde_]    Script Date: 11/09/2018 21:09:55 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[Enfunde_](
    	[Id_Enfunde] [int] IDENTITY(1,1) NOT NULL,
    	[Cantidad_Enfunde] [float] NULL,
     CONSTRAINT [PK_Enfunde_] PRIMARY KEY CLUSTERED 
    (
    	[Id_Enfunde] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    
    GO
    SET IDENTITY_INSERT [dbo].[Cosechaa] ON 
    
    INSERT [dbo].[Cosechaa] ([Id_Cosecha], [Cantidad_Cosecha], [Id_Enfunde]) VALUES (1, 50, 1)
    INSERT [dbo].[Cosechaa] ([Id_Cosecha], [Cantidad_Cosecha], [Id_Enfunde]) VALUES (2, 70, 1)
    INSERT [dbo].[Cosechaa] ([Id_Cosecha], [Cantidad_Cosecha], [Id_Enfunde]) VALUES (3, 25, 1)
    INSERT [dbo].[Cosechaa] ([Id_Cosecha], [Cantidad_Cosecha], [Id_Enfunde]) VALUES (4, 15, 2)
    INSERT [dbo].[Cosechaa] ([Id_Cosecha], [Cantidad_Cosecha], [Id_Enfunde]) VALUES (5, 20, 2)
    SET IDENTITY_INSERT [dbo].[Cosechaa] OFF
    SET IDENTITY_INSERT [dbo].[Enfunde_] ON 
    
    INSERT [dbo].[Enfunde_] ([Id_Enfunde], [Cantidad_Enfunde]) VALUES (1, 200)
    INSERT [dbo].[Enfunde_] ([Id_Enfunde], [Cantidad_Enfunde]) VALUES (2, 150)
    INSERT [dbo].[Enfunde_] ([Id_Enfunde], [Cantidad_Enfunde]) VALUES (3, 250)
    SET IDENTITY_INSERT [dbo].[Enfunde_] OFF
    ALTER TABLE [dbo].[Cosechaa]  WITH CHECK ADD  CONSTRAINT [FK_Cosechaa_Enfunde_] FOREIGN KEY([Id_Enfunde])
    REFERENCES [dbo].[Enfunde_] ([Id_Enfunde])
    GO
    ALTER TABLE [dbo].[Cosechaa] CHECK CONSTRAINT [FK_Cosechaa_Enfunde_]
    GO
    SELECT        dbo.Enfunde_.Id_Enfunde, 
    dbo.Enfunde_.Cantidad_Enfunde
    , dbo.Cosechaa.Id_Cosecha, dbo.Cosechaa.Cantidad_Cosecha
    FROM            dbo.Enfunde_ LEFT OUTER JOIN
                             dbo.Cosechaa ON dbo.Enfunde_.Id_Enfunde = dbo.Cosechaa.Id_Enfunde
    Go
    

    El cual me muestra el siguiente resultado:

    Como puede ver la columna "Cantidad_enfunde" se repite 3 veces la cantidad 200, lo que quiziera es que solo se muestre una vez esa cantidad y las restantes aparezca 0, como ven en la siguiente imagen.


    miércoles, 12 de septiembre de 2018 2:24

Respuestas

  • Hola Abraham N. Cueva:

    SELECT d.Id_Enfunde,
           CASE
               WHEN LAG(d.Cantidad_Enfunde) OVER(PARTITION BY d.id_enfunde ORDER BY d.id_enfunde) IS NULL
               THEN d.Cantidad_Enfunde
               ELSE 0
           END AS Cantidad_Enfunde,
           c.Id_Cosecha,
           c.Cantidad_Cosecha
    FROM dbo.Enfunde_ d
         LEFT JOIN dbo.Cosechaa c ON d.Id_Enfunde = c.Id_Enfunde;
    
    					 

    Puedes utilizar LAG.

    Resultado:

    Un saludo

    • Marcado como respuesta Abram N. Cueva miércoles, 12 de septiembre de 2018 9:34
    miércoles, 12 de septiembre de 2018 5:24