Domanda sulla SELECT (MSSQL Express)

martedì 10 marzo 2009 - 09.48

lordwaizard Profilo | Senior Member

Ho realizzato questa stringa sql e funziona correttamente.
SELECT @idm = MAX(id),@iva = MAX(iva),@iva = MAX(importo),@r = MAX(r) FROM

Il problema è che ovviamente con la direttiva MAX ho solo una riga, come posso ciclare tutte le righe e salvare nelle variabili?

Grazie in anticipo.
Davide

lbenaglia Profilo | Guru

>Ho realizzato questa stringa sql e funziona correttamente.
>SELECT @idm = MAX(id),@iva = MAX(iva),@iva = MAX(importo),@r
>= MAX(r) FROM
>
>Il problema è che ovviamente con la direttiva MAX ho solo una
>riga, come posso ciclare tutte le righe e salvare nelle variabili?

Ciao Davide,

Puoi postare un exempio completo con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vorresti ottenere con quei dati?

>Grazie in anticipo.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

TABELLA:

CREATE TABLE [dbo].[primanota](
[id] [int] IDENTITY(1,1) NOT NULL,
[r] [int] NULL,
[op] [int] NOT NULL,
[reg] [int] NOT NULL,
[regdata] [datetime] NOT NULL,
[doc] [nvarchar](50) NOT NULL,
[docdata] [datetime] NOT NULL,
[pro] [int] NOT NULL,
[descri] [nvarchar](150) NOT NULL,
[dare] [int] NOT NULL,
[avere] [int] NOT NULL,
[iva] [nvarchar](50) NOT NULL,
[importo] [decimal](18, 2) NOT NULL,
[utente] [nvarchar](50) NOT NULL,
[data] [datetime] NOT NULL,
[annofis] [int] NOT NULL,
[chiudi] [datetime] NULL,
[nascondi] [int] NULL,
CONSTRAINT [PK_primanota] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]



QUERY:

DECLARE @idm int
DECLARE @r int
DECLARE @iva nvarchar(50)
DECLARE @importo decimal

SELECT @idm = MAX(id),@iva = MAX(iva),@iva = MAX(importo),@r = MAX(r) FROM primanota WHERE op = '2' AND dare = '132948' AND nascondi IS NULL


RISULTATO:
SELECT * FROM primanota WHERE id = @idm-1
SELECT * FROM primanota WHERE id = @idm
SELECT TOP (1) * FROM primanota WHERE r = @r ORDER BY id DESC


Il problema è semplice se io utilizzo la funzione MAX lui considera solo la prima riga e non tutte le righe, ho invece la necessita che questa operazione venga replicata per tutte le righe.


Per ovviare in vb potrei risolverla così:


SELECT id FROM primanota WHERE op = '2' AND dare = '132948' AND nascondi IS


memorizzo tutti gli id in un array.

poi ciclo ogni volta così
DECLARE @idm int
DECLARE @r int
DECLARE @iva nvarchar(50)
DECLARE @importo decimal

SELECT @idm = MAX(id),@iva = MAX(iva),@iva = MAX(importo),@r = MAX(r) FROM primanota WHERE id = '5'


RISULTATO:
SELECT * FROM primanota WHERE id = @idm-1
SELECT * FROM primanota WHERE id = @idm
SELECT TOP (1) * FROM primanota WHERE r = @r ORDER BY id DESC


Vorrei fare tutto da sql senza passare da sql a vb.

Si può fare?

lbenaglia Profilo | Guru

>TABELLA:
>
>CREATE TABLE [dbo].[primanota](
> [id] [int] IDENTITY(1,1) NOT NULL,
> [r] [int] NULL,
> [op] [int] NOT NULL,
> [reg] [int] NOT NULL,
> [regdata] [datetime] NOT NULL,
> [doc] [nvarchar](50) NOT NULL,
> [docdata] [datetime] NOT NULL,
> [pro] [int] NOT NULL,
> [descri] [nvarchar](150) NOT NULL,
> [dare] [int] NOT NULL,
> [avere] [int] NOT NULL,
> [iva] [nvarchar](50) NOT NULL,
> [importo] [decimal](18, 2) NOT NULL,
> [utente] [nvarchar](50) NOT NULL,
> [data] [datetime] NOT NULL,
> [annofis] [int] NOT NULL,
> [chiudi] [datetime] NULL,
> [nascondi] [int] NULL,
> CONSTRAINT [PK_primanota] PRIMARY KEY CLUSTERED
>(
> [id] ASC
>)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY
>= OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
>) ON [PRIMARY]
>
>
>
>QUERY:
Fermo, non ti ho chiesto le query, ma semplicemente dei dati di prova (INSERT INTO) ed il result set finale che vuoi ottenere con quei dati.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

Ho bisogno di tutti i dati della tabella della riga dell'id, e della riga precedente dell'id.
E per finire l'ultima riga dell'operazione ricavata dalla colonna r (il valore della r preso dalla riga dell'id della ricerca)

Quindi servono tutti i dati immessi di tutte le righe raggruppati così
ID
1
2
3
4
5


Risultato righe visualizzate
Primo blocco
1
2
5

Secondo blocco
3
4
5

Usando max riesco a vedere solo il secondo dovrei invece visualizzare n blocchi.

Grazie scusa se ti sto facendo impazzire

lbenaglia Profilo | Guru

>Grazie scusa se ti sto facendo impazzire
Eh, puoi dirlo forte
Per la terza volta ti chiedo di allegare i comandi di INSERT INTO ed il result set finale che vuoi ottenere con quei dati, altrimenti dubito che potrò aiutarti.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

lordwaizard Profilo | Senior Member

INSERT:
INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 108, 0, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 320604, 0, '20', 300.00, 'paolo', '2009-03-09 16:47:03.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 109, 0, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 132948, 0, '20', 60.00, 'paolo', '2009-03-09 16:47:54.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 110, 0, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 0, 247012, '20', 360.00, 'paolo', '2009-03-09 16:48:15.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 111, 1, 0, 0, '2009-03-09 00:00:00.000', '138', '2009-03-09 00:00:00.000', 0, 'errato', 134100, 0, '', 0.00, 'paolo', '2009-03-09 17:28:39.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 112, 1, 0, 0, '2009-03-09 00:00:00.000', '140', '2009-03-09 00:00:00.000', 0, 'errat', 0, 134100, '0', 0.00, 'paolo', '2009-03-09 17:30:06.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 113, 1, 0, 0, '2009-03-10 00:00:00.000', '148', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 12:54:02.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 114, 1, 0, 0, '2009-03-10 00:00:00.000', '148', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 12:54:03.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 115, 1, 0, 0, '2009-03-10 00:00:00.000', '149', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 14:40:35.000', 0, NULL, NULL );




INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 116, 3, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 320604, 0, '20', 300.00, 'paolo', '2009-03-09 16:47:03.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 117, 3, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 132948, 0, '20', 60.00, 'paolo', '2009-03-09 16:47:54.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 118, 3, 2, 0, '2009-03-09 00:00:00.000', '131', '2009-03-09 00:00:00.000', 0, 'italia fatt 234 567', 0, 247012, '20', 360.00, 'paolo', '2009-03-09 16:48:15.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 119, 4, 0, 0, '2009-03-09 00:00:00.000', '138', '2009-03-09 00:00:00.000', 0, 'errato', 134100, 0, '', 0.00, 'paolo', '2009-03-09 17:28:39.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 120, 4, 0, 0, '2009-03-09 00:00:00.000', '140', '2009-03-09 00:00:00.000', 0, 'errat', 0, 134100, '0', 0.00, 'paolo', '2009-03-09 17:30:06.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 121, 4, 0, 0, '2009-03-10 00:00:00.000', '148', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 12:54:02.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 122, 4, 0, 0, '2009-03-10 00:00:00.000', '148', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 12:54:03.000', 0, NULL, NULL );

INSERT INTO [dbo].[primanota] ([id], [r], [op], [reg], [regdata], [doc], [docdata], [pro], [descri], [dare], [avere], [iva], [importo], [utente], [data], [annofis], [chiudi], [nascondi])
VALUES ( 123, 4, 0, 0, '2009-03-10 00:00:00.000', '149', '2009-03-10 00:00:00.000', 0, 'ciao', 0, 0, '20', 222.00, 'davide', '2009-03-10 14:40:35.000', 0, NULL, NULL );



RISULTATO FINALE IN ORDINE CORRETTO (id delle righe da visualizzare):
108
109
110
116
117
118
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5