Usuario
Consulta en Datos Agrupados usando bucle

Pregunta
-
Buen dia tengo que elaborar un consulta, la cual necesito que me haga una busqueda por semana, y que a su vez me haga un select por cada id_planilla con la cual este relacionado, por ejemplo en la siguiente imagen tengo la semana 25 y el id_planilla 1 y 2
Como podría lograr una consulta, había visto en algunas paginas y llegue a la conclusión que se podría hacer uso de un Bucle, quiziera que me orienten acerca de como podria lograr hacer la consulta.
El resultado que quiero obtener es el siguiente:
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
- Editado Abram N. Cueva lunes, 25 de junio de 2018 0:25
Todas las respuestas
-
No hace falta un bucle. Usa una variable tipo tabla, inserta esos valores de busqueda y has un JOIN con tu tabla.
declare @T table (
id_planilla int not null,
semana varchar(10) not null,
primary key (id_planilla, semana)
);insert into @T (id_planilla, semana) values (1, 25), (2, 25);
select A.*
from dbo.trab as A iiner join @T as B
on A.semana = B.semana and A.id_planilla = B.id_planilla;AMB
Some guidelines for posting questions...
AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas- Propuesto como respuesta Juan MondragónModerator lunes, 25 de junio de 2018 21:46
- Votado como útil Abram N. Cueva martes, 26 de junio de 2018 20:54
-
Agradezco la respuesta pero no es lo que necesito, en la primera imagen que mostre que esta,
la semana 25 esta relacionada con Id_Planilla 1 y 2 , pero he hecho una consulta que me bota este resultado.
lo que quiero es que me busque por el Id_planilla 1 y 2 ... ademas que la consulta no me bote los resultados separados, sino en un solo.
La consulta que hize fue la siguiente.
Declare @id int, @count int, @Semana varchar(10) ='25', @Id_Pla INT Set @id=1; with mycte as (SELECT count(ID) AS ID FROM ( select count(trab.Id_Planilla) as ID from trab where trab.Semana = @Semana group by trab.Id_Planilla ) AS M) select @count= ID FROM mycte while @id<=@count begin Select @Id_Pla = (trab.Id_Planilla) from trab where trab.Semana = @Semana group by trab.Id_Planilla, trab.Semana SELECT [id_Detalle] ,[trabajador] ,[cupo_diario] ,[Javas_Hechas_Campo] ,[precio_caja] ,[Javas_anaranjadas] ,[Diario] ,[Dominical], (([cupo_diario]-[Javas_Hechas_Campo])*([precio_caja]))+[Javas_anaranjadas] ,[Id_Planilla] ,[Semana] FROM trab wHERE SEMANA= @Semana AND Id_Planilla=@Id_Pla select @id=@id+1 end