none
Formula en Sql server con campos agrupados RRS feed

  • Pregunta

  • Buen dia, quiero que orienten en como realizar una consulta, a continuacion explico lo que quiero

    Tengo la siguiente tabla, como ven hay una columna trabajador, la cual tiene trabajadores repetidos, necesito realizar una primera formula la cual es la siguiente:

    (((JAVAS HECHAS CAMPO - CUPO DIARIO)*PRECIO CAJA)+JAVAS ANARANJADAS)/CANTIDAD TOTAL DE TRABAJADORES SIN REPETIR

    DONDE:CANTIDAD TOTAL DE TRABAJADORES SIN REPETIR ES IGUAL A 4

    RESULTADO 14.15

    Ahora una vez que obtengo ese resultado, necesito dividirlo entre el numero  de veces que aparece el trabajador de forma individual, como ven administrador, joel y evelyn aparecen una vez asi que la division sera entre 1, en el caso la division sera entre 3, siendo el resultado el siguiente:

     Mi pregunta es como podria realizar la consulta, he logrado obtener el primer resultado, pero al momento de intentar obtener el resultado final no he podido. Espero puedan orientarme. Gracias

    miércoles, 6 de junio de 2018 4:51

Respuestas

  • Hola Abram N. Cueva

    use [foros]
    go
    create table trab (id_Detalle int, trabajador varchar(50), cupo_diario int, Javas_Hechas_Campo int, precio_caja float, Javas_anaranjadas int)
    go
    insert into trab (id_Detalle , trabajador , cupo_diario , Javas_Hechas_Campo , precio_caja , Javas_anaranjadas ) values 
    (1,'Admin',250,252,2.3,52),
    (8,'Joel',250,252,2.3,52),
    (9,'Evelyn',250,252,2.3,52),
    (10,'Jorge',250,252,2.3,52),
    (1036,'Jorge',250,252,2.3,52),
    (1037,'Jorge',250,252,2.3,52)
    go
    
    
    
    SELECT t.*,
           ((((t.Javas_Hechas_Campo - t.cupo_diario) * t.precio_caja) + t.Javas_anaranjadas) / o.veces) /
    (
        SELECT COUNT(r.trabajador)
        FROM
    (
        SELECT trabajador
        FROM trab t
        GROUP BY trabajador
    ) AS r
    ) AS red
    FROM trab t
         INNER JOIN
    (
        SELECT t.trabajador,
               COUNT(*) AS veces
        FROM trab t
        GROUP BY t.trabajador
    ) AS o ON t.trabajador = o.trabajador;
     
     
    Un saludo

    • Marcado como respuesta Abram N. Cueva viernes, 22 de junio de 2018 2:24
    miércoles, 6 de junio de 2018 5:59

Todas las respuestas

  • Hola Abram N. Cueva

    use [foros]
    go
    create table trab (id_Detalle int, trabajador varchar(50), cupo_diario int, Javas_Hechas_Campo int, precio_caja float, Javas_anaranjadas int)
    go
    insert into trab (id_Detalle , trabajador , cupo_diario , Javas_Hechas_Campo , precio_caja , Javas_anaranjadas ) values 
    (1,'Admin',250,252,2.3,52),
    (8,'Joel',250,252,2.3,52),
    (9,'Evelyn',250,252,2.3,52),
    (10,'Jorge',250,252,2.3,52),
    (1036,'Jorge',250,252,2.3,52),
    (1037,'Jorge',250,252,2.3,52)
    go
    
    
    
    SELECT t.*,
           ((((t.Javas_Hechas_Campo - t.cupo_diario) * t.precio_caja) + t.Javas_anaranjadas) / o.veces) /
    (
        SELECT COUNT(r.trabajador)
        FROM
    (
        SELECT trabajador
        FROM trab t
        GROUP BY trabajador
    ) AS r
    ) AS red
    FROM trab t
         INNER JOIN
    (
        SELECT t.trabajador,
               COUNT(*) AS veces
        FROM trab t
        GROUP BY t.trabajador
    ) AS o ON t.trabajador = o.trabajador;
     
     
    Un saludo

    • Marcado como respuesta Abram N. Cueva viernes, 22 de junio de 2018 2:24
    miércoles, 6 de junio de 2018 5:59
  • Hola Abram N. Cueva.

    Este es el orgigen de tus datos para plantilla 1


    Sobre tu tabla

    DECLARE @PLANTILLA INT = 1;
    SELECT t.*,
           ((((t.Javas_Hechas_Campo - t.cupo_diario) * t.precio_caja) + t.Javas_anaranjadas) / o.veces) /
    		(
    		SELECT COUNT(r.trabajador)
    		FROM
    			(
    				SELECT trabajador
    					FROM trab t
    				GROUP BY trabajador
    			) AS r
    		) AS Adic_x_MAQ
    	FROM trab t
    		 INNER JOIN
    		(
    			SELECT t.trabajador,
    				COUNT(*) AS veces
    				FROM trab t
    					GROUP BY t.trabajador
    		) AS o ON t.trabajador = o.trabajador
    where t.id_Planilla = @PLANTILLA

    Resultado


    ¿No es este el resultado a obtener?

    Un saludo

    jueves, 7 de junio de 2018 5:01
  • Hola Haber si me pueden dar una ayuda, lo que quiero exactamente es lo siguiente:

    Tengo una Tabla y la consulta que es la siguiente:

    CREATE TABLE [dbo].[trab](

           [id_Detalle] [int] IDENTITY(1,1) NOT NULL,

           [trabajador] [varchar](50) NULL,

           [cupo_diario] [int] NULL,

           [Javas_Hechas_Campo] [int] NULL,

           [precio_caja] [float] NULL,

           [Javas_anaranjadas] [int] NULL,

           [Diario] [float] NULL,

           [Dominical] [float] NULL,

           [Id_Planilla] [int] NULL,

     CONSTRAINT [PK_trab] PRIMARY KEY CLUSTERED

    (

           [id_Detalle] 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 ANSI_PADDING OFF

    GO

    SET IDENTITY_INSERT [dbo].[trab] ON

     

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1, N'Admin', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (8, N'Joel', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (9, N'Evelyn', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (10, N'Jorge', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1036, N'Jorge', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1037, N'Jorge', 250, 252, 2.3, 52, 20, 2.5, 1)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1044, N'Admin', 250, 252, 2.3, 52, 5, 2.5, 2)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1045, N'Joel', 250, 252, 2.3, 52, 5, 2.5, 2)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1046, N'Evelyn', 250, 252, 2.3, 52, 5, 2.5, 2)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1047, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1048, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2)

    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla]) VALUES (1049, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2)

    SET IDENTITY_INSERT [dbo].[trab] OFF

     

    Go

    ----LA CONSULTA QUE HE REALIZADO ES LA SIGUIENTE:

     

    DECLARE @ID_PLANILLA INT

    SET @ID_PLANILLA=1

     

    --TRABAJADORES TOTALES DE ID_PLANILLA SIN REPETIR

    DECLARE @TOT_TRAB_SIN_REP FLOAT

    SELECT @TOT_TRAB_SIN_REP = COUNT(DISTINCT trabajador) FROM trab

    WHERE trab.Id_Planilla =@ID_PLANILLA

     

    SELECT  trab.id_Detalle AS [ID_DETALLE], Trabajador,

    -- ADICIONAL POR MAQUILA

    Cupo_Diario AS CUPO_DIARIO, Javas_Hechas_Campo AS JAVAS_HECHAS_CAMPO, precio_caja AS PRECIO_X_CAJA, Javas_Anaranjadas AS JAVAS_ANARANJADAS,

    ((((Javas_Hechas_Campo-Cupo_Diario)*precio_caja)+(Javas_Anaranjadas))/@TOT_TRAB_SIN_REP) AS ADIC_x_MAQ

    ,Diario as DIARIO, Dominical AS DOMINICAL, ((Diario + Dominical) + 

    ((((Javas_Hechas_Campo-Cupo_Diario)*precio_caja)+(Javas_Anaranjadas))/@TOT_TRAB_SIN_REP)) AS SUELDO_BRUTO

    --====================================================================================================================

      FROM [dbo].trab

    WHERE     (trab.Id_Planilla  =@ID_PLANILLA)

     

    y la cual me da resultado lo siguiente:

    Ahora como ven el trabajador jorge se repite 3 veces, por lo que el resultado de columna ADIC_x_MAQ se debe dividir por el numero de veces, y este resultado se debe sumar a diario mas dominical, quedando un resultado igual a este

    La pregunta es como puedo lograr en la consultaque hize obtener ese resultado.


    lunes, 18 de junio de 2018 0:37
  • Hola Abram N. Cueva:

    Ese resultado lo puedes obtener utilizando una tabla derivada

     DECLARE @ID_PLANILLA INT
    
    SET @ID_PLANILLA=1
    
     
    
    --TRABAJADORES TOTALES DE ID_PLANILLA SIN REPETIR
    
    DECLARE @TOT_TRAB_SIN_REP FLOAT
    
    SELECT @TOT_TRAB_SIN_REP = COUNT(DISTINCT trabajador) FROM trab
    
    WHERE trab.Id_Planilla =@ID_PLANILLA
    
     
    
    SELECT  t.id_Detalle AS [ID_DETALLE], t.Trabajador,
    
    -- ADICIONAL POR MAQUILA
    
    t.Cupo_Diario AS CUPO_DIARIO, t.Javas_Hechas_Campo AS JAVAS_HECHAS_CAMPO, t.precio_caja AS PRECIO_X_CAJA, t.Javas_Anaranjadas AS JAVAS_ANARANJADAS,
    
    (((((t.Javas_Hechas_Campo-t.Cupo_Diario)*t.precio_caja)+(t.Javas_Anaranjadas))/@TOT_TRAB_SIN_REP)/p.veces) AS ADIC_x_MAQ
    
    ,t.Diario as DIARIO, t.Dominical AS DOMINICAL, ((t.Diario + t.Dominical) + 
    
    ((((t.Javas_Hechas_Campo-t.Cupo_Diario)*t.precio_caja)+(t.Javas_Anaranjadas))/@TOT_TRAB_SIN_REP)/p.veces) AS SUELDO_BRUTO, p.veces
    
    --====================================================================================================================
    
      FROM [dbo].trab t
      inner join (
    	select count(*) as veces, trabajador from trab group by trabajador
    
      ) as p on t.trabajador= p.trabajador
    
    
    WHERE     (t.Id_Planilla  =@ID_PLANILLA)

    Si observas la solución, relaciono tu Trab con una tabla que te dice las veces que hay una ocurrencia de trabajador por su campo Trabajador, e incluye el campo p.veces en las fórmulas que tu planteas.

    Un saludo

    martes, 19 de junio de 2018 6:35
  • Agradezco a JAvi Fernandez, por tu primera respuesta, la adapte a una funcion con valores de tabla y funciono de la forma que queria. Ahora tengo otra pregunta es que quiero elaborar un reporte pero esta vez la busqueda la necesito por semana y obtener un resultado parecido a este.

    La tabla que tengo es la siguiente:

    CREATE TABLE [dbo].[trab](
    	[id_Detalle] [int] IDENTITY(1,1) NOT NULL,
    	[trabajador] [varchar](50) NULL,
    	[cupo_diario] [int] NULL,
    	[Javas_Hechas_Campo] [int] NULL,
    	[precio_caja] [float] NULL,
    	[Javas_anaranjadas] [int] NULL,
    	[Diario] [float] NULL,
    	[Dominical] [float] NULL,
    	[Id_Planilla] [int] NULL,
    	[Semana] [varchar](10) NULL,
     CONSTRAINT [PK_trab] PRIMARY KEY CLUSTERED 
    (
    	[id_Detalle] 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 ANSI_PADDING OFF
    GO
    SET IDENTITY_INSERT [dbo].[trab] ON 
    
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1, N'Admin', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (8, N'Joel', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (9, N'Evelyn', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (10, N'Jorge ', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1036, N'Jorge', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1037, N'Jorge', 250, 252, 2.3, 52, 20, 2.5, 1, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1044, N'Admin', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1045, N'Joel', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1046, N'Evelyn', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1047, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1048, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1049, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 2, N'25')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1050, N'Admin', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1051, N'Joel', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1052, N'Evelyn', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1053, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1054, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1055, N'Jorge', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1056, N'Pedro', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    INSERT [dbo].[trab] ([id_Detalle], [trabajador], [cupo_diario], [Javas_Hechas_Campo], [precio_caja], [Javas_anaranjadas], [Diario], [Dominical], [Id_Planilla], [Semana]) VALUES (1057, N'Pedro', 250, 252, 2.3, 52, 5, 2.5, 3, N'26')
    SET IDENTITY_INSERT [dbo].[trab] OFF
    
    Alguna sugerencia acerca de como podria obtener ese resultado. Gracias

    viernes, 22 de junio de 2018 2:47
  • Hola Abram N. Cueva.

    Si la pregunta es otra, mejor ponlo en otro post, más que nada, porque el resto de colaboradores, que siempre pueden aportar su opinión, van a dejar pasar este aporte, porque esta marcado como respuesta.

    Seguro que se puede aportar algo.

    Un saludo

    viernes, 22 de junio de 2018 5:41