>Ok potevo anche aprire gli occhi e avrei visto come si faceva
>a trovare il codice per la create... cmq ho allegato nell'archivio,
>alcuni file sql generati da sql server 2005...
, no problem, vanno benissimo.
Ho provato ad ottenere quello che ti serve con le CTE e le ranking functions:
USE tempdb;
GO
CREATE TABLE dbo.libro
(
ID int IDENTITY(1,1) NOT NULL
, titolo nvarchar(50) NULL
, id_autore int NULL DEFAULT (0)
, id_casa int NULL DEFAULT (0)
, qta int NULL DEFAULT (0)
, CONSTRAINT PK_libro PRIMARY KEY NONCLUSTERED
(
ID ASC
)
)
GO
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo1',1,1,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo2',1,2,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo3',1,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo4',1,1,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo5',1,2,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo6',1,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo1',2,1,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo2',2,2,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo3',2,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo4',2,1,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo5',2,2,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo6',2,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo1',3,1,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo2',3,2,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo3',3,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo4',3,4,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo5',3,5,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo6',3,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo7',3,4,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo8',3,5,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo9',3,3,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo0',3,4,0)
INSERT INTO libro (titolo,id_autore,id_casa,qta) VALUES('Titolo1',3,5,0)
GO
-- tabella di appoggio per il numero di riga
DECLARE @t TABLE (ID int, numeroriga int, titolo nvarchar(50))
INSERT INTO @t
SELECT
ID
, numeroriga = (ROW_NUMBER() OVER (ORDER BY ID) - 1)
, titolo
FROM
libro
SELECT * FROM @t
/*
ID numeroriga titolo
----------- ----------- --------------
1 0 Titolo1
2 1 Titolo2
3 2 Titolo3
4 3 Titolo4
5 4 Titolo5
6 5 Titolo6
7 6 Titolo1
8 7 Titolo2
9 8 Titolo3
10 9 Titolo4
11 10 Titolo5
12 11 Titolo6
13 12 Titolo1
14 13 Titolo2
15 14 Titolo3
16 15 Titolo4
17 16 Titolo5
18 17 Titolo6
19 18 Titolo7
20 19 Titolo8
21 20 Titolo9
22 21 Titolo0
23 22 Titolo1
*/
-- ricavo i gruppi e trovo l'iteratore
;WITH GruppiLibri AS
(
SELECT
*
, gruppo = numeroriga / 5
, conteggio = ROW_NUMBER() OVER (PARTITION BY numeroriga / 5 ORDER BY ID)
FROM @t
)
/*
ID numeroriga titolo gruppo conteggio
----------- ----------- ----------- ----------- --------------------
1 0 Titolo1 0 1
2 1 Titolo2 0 2
3 2 Titolo3 0 3
4 3 Titolo4 0 4
5 4 Titolo5 0 5
6 5 Titolo6 1 1
7 6 Titolo1 1 2
8 7 Titolo2 1 3
9 8 Titolo3 1 4
10 9 Titolo4 1 5
11 10 Titolo5 2 1
12 11 Titolo6 2 2
13 12 Titolo1 2 3
14 13 Titolo2 2 4
15 14 Titolo3 2 5
16 15 Titolo4 3 1
17 16 Titolo5 3 2
18 17 Titolo6 3 3
19 18 Titolo7 3 4
20 19 Titolo8 3 5
21 20 Titolo9 4 1
22 21 Titolo0 4 2
23 22 Titolo1 4 3
*/
-- eseguo l'update per ID
UPDATE L
SET qta = GL.conteggio
FROM
libro L
JOIN GruppiLibri GL ON L.ID = GL.ID
GO
SELECT * FROM libro
/*
ID titolo id_autore id_casa qta
----------- --------- ----------- ----------- -----------
1 Titolo1 1 1 1
2 Titolo2 1 2 2
3 Titolo3 1 3 3
4 Titolo4 1 1 4
5 Titolo5 1 2 5
6 Titolo6 1 3 1
7 Titolo1 2 1 2
8 Titolo2 2 2 3
9 Titolo3 2 3 4
10 Titolo4 2 1 5
11 Titolo5 2 2 1
12 Titolo6 2 3 2
13 Titolo1 3 1 3
14 Titolo2 3 2 4
15 Titolo3 3 3 5
16 Titolo4 3 4 1
17 Titolo5 3 5 2
18 Titolo6 3 3 3
19 Titolo7 3 4 4
20 Titolo8 3 5 5
21 Titolo9 3 3 1
22 Titolo0 3 4 2
23 Titolo1 3 5 3
*/
DROP TABLE libro
GO
copia tutto il codice (tutto, perchè i nomi tabella sono uguali ai tuoi e in fondo ci sono le DROP TABLE ) e verrà lanciato su tempdb senza "rompere" il tuo db .
Spero sia quello che ti serve
>
>grazie
di nulla!
Alx81 =)
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org