ti sto finendo un esempio.. che però ti porterà almeno a pensare di cambiare un po' le cose, o, in alternativa più probabile, ad abbandonare la mia proposta.
L'esempio è il seguente:
CREAZIONE OGGETTI:
USE tempdb;
GO
CREATE TABLE dbo.Testata
(
idTestata int IDENTITY(1, 1)
, nome varchar(20)
, PRIMARY KEY (
idTestata
)
);
GO
CREATE TABLE dbo.Dettagli
(
idTestata int
, idDettaglio int IDENTITY(1, 1)
, dataDettaglio datetime
, valoreInt int
, valoreDec decimal
, PRIMARY KEY (
idDettaglio
)
);
GO
CREATE TABLE dbo.Risultati
(
idTestata int
, valore decimal
, PRIMARY KEY (
idTestata
)
);
GO
SET NOCOUNT ON;
GO
DECLARE @i int = 1;
DECLARE @id int;
WHILE @i <= 100000
BEGIN
INSERT INTO dbo.Testata (nome)
VALUES ('Test ' + CAST(@i AS varchar(10)));
SET @id = SCOPE_IDENTITY();
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i, @i/0.3);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*2, @i/0.3*2);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*3, @i/0.3*3);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*4, @i/0.3*4);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*5, @i/0.3*5);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*6, @i/0.3*6);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*7, @i/0.3*7);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*8, @i/0.3*8);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*9, @i/0.3*9);
INSERT INTO dbo.Dettagli (idTestata, dataDettaglio, valoreInt, valoreDec)
VALUES (@id, GETDATE(), @i*10, @i/0.3*10);
SET @i = @i + 1;
END;
SELECT COUNT(*) FROM dbo.Testata;
SELECT COUNT(*) FROM dbo.Dettagli;
--DROP TABLE dbo.Dettagli;
--GO
--DROP TABLE dbo.Testata;
--GO
--DROP TABLE dbo.Risultati;
--GO
1) fatto con cursore:
2) fatto set based
>come posso fare la join tra eventi e squadre + partite (che serve
>per calcolare la classifica) avendo un campo della tabella eventi
>che serve per fare il filtro?
Purtroppo la tua è una questione di bad design. Mettere una logica di filtro all'interno della tabella ti obbliga a fare delle considerazioni che purtroppo non sono molto database oriented.
Quindi mi spiace, ma o cambi un po' il design oppure credo che il ciclo te lo dovrai tenere, e, di conseguenza, anche la durata. Credo che devi proprio intervenire sul modello, non vedo altri rimedi.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi