Salve rieccomi con i miei problemi sulle query
avrei bisogno di capire come filtrare i dati in base ad alcune condizioni
Qui ci sono le tabelle interessate:
CREATE TABLE [dbo].[SK_Merito_UT] (
[OP] [char] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Mese] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ID_Gruppo] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ResaMedia] [decimal](6, 2) NULL
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[GRUPPI] (
[ID] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[MESE] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[DESCRIZIONE] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
[id_lavorazione] [smallint] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Lavorazioni] (
[id_lavorazione] [smallint] IDENTITY (10, 1) NOT NULL ,
[LAVORAZIONE] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[SK_GENERALE] (
[OP] [char] (16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Mese] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[ID_GRUPPO] [char] (7) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[Punti] [int] NULL
) ON [PRIMARY]
queste sono le tabelle con degli valori fittizi:
Tabella sk_generale:
sanfra 092008 GRP0009 NULL
sanfra 092008 GRP0071 NULL
sanfra 102008 GRP0010 NULL
sanfra 102008 GRP0078 NULL
Tabella Lavorazione
4 prova1
28 prova2
Tabella Gruppi
GRP0071 092008 descrizione 28
GRP0078 102008 descrizione 28
GRP0009 092008 descrizione 4
GRP0010 102008 descrizione 4
Tabella Merito_ut
sanfra 092008 GRP0009 13.38
sanfra 092008 GRP0071 17.97
sanfra 102008 GRP0010 12.70
sanfra102008 GRP0078 17.00
Fatto questo mi è stato chiesto di assegnare dei punti (tabella sk_generale) ,per esmepio 15 all'utente che abbia la stessa lavorazione del mese precedente
e la resa media del mese corrente sia maggiore o uguale al mese precedente + 10%
non so se è chiaro
ma io ho già costruito la mia query che estrae correttamente i miei dati ,ma nel caso(come indicato sopra) ci sono più utenti che lavorano più volte nello stesso mese
succede che mi calcola il primo gruppo ma non gli altri.
questa è la mia query
update sk_generale set punti = punti + 30
from sk_generale gen
join ANA_GRUPPI anagr
on anagr.ID = gen.ID_GRUPPO
and anagr.Mese = gen.Mese
join Lavorazioni lav
on lav.id_lavorazione = anagr.id_lavorazione
join sk_Merito_Outbound me_out
on me_out.OP = gen.OP
and me_out.Mese = gen.Mese
and me_out.ID_Gruppo = gen.ID_GRUPPO
join sk_merito_outbound me_out_prec
on me_out_prec.OP = gen.OP
AND me_out_prec.Mese = dbo.previousmonth(gen.Mese)
and me_out_prec.id_gruppo = gen.id_gruppo
where me_out.ResaMedia >= (me_out_prec.ResaMedia + (me_out_prec.ResaMedia * 0.1)) and (me_out_prec.ResaMedia > 0 AND me_out.ResaMedia > 0)