Principale utente con più risposte
N-esimo valore di una query

Domanda
-
Salve a tutti,
Ho una domanda curiosa da porre alla vostra attenzione :
Ho una query del genere
SELECT Campo FROM TABELLA
che io adopero come subquery e, che dovrebbe ritornarmi un solo valore e, precisamente a me interessa il 2° valore;
chiarisco adesso con un esempio, questo è il risultato della query precedente
Valore 1
Valore 2
Valore 3
Valore 4
Valore 5
Valore 6
Valore 7
io vorrei però che la query mi restituisse esclusivamente il 2° valore;
Come posso fare senza usare procedure, viste o funzioni ma, esclusivamente codice SQL?
PS:
Non posso usare una clausola WHERE, perchè mi trovo in una SQL Expression di Crystal Reports e, non posso fare riferimento a valori esterni al Database
- Modificato AngeloNew mercoledì 6 giugno 2012 13:53
Risposte
-
Per risolvere potresti usare una tabella di appoggio cone nello script che segue:
SELECT IDENTITY (int, 1, 1) AS NumeroRiga, campo INTO #temp FROM tabella SELECT campo FROM #Temp where NumeroRiga=2 DROP TABLE #Temp
Valore 2
e ritorna la la seconda riga
http://www.codeproject.com/Articles/39033/Row-Numbers-in-SQL-Query-Microsoft-SQL-Server-2000Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!- Proposto come risposta GastoneCanali mercoledì 6 giugno 2012 21:49
- Contrassegnato come risposta AngeloNew venerdì 8 giugno 2012 07:45
Tutte le risposte
-
-
per 2000 rowcount ancora non c'era.
si poteva aggirare la cosa con tabelle temporanee, ma forse anche con una query.
Il meccanismo era come il classico problema del select top x per ogni raggruppamentoTi serve cmq di incapsulare un pò di codice in qualcosa, prova innanzi tutto a vedere se in crystal report puoi usare una funzione a livello di tabella, credo di si cqm.
tipo select campo from dbo.miafunzione(..)
poi dentro questa funzione proviamo a risolvere l'altro problema di prendere solo l'x valore
-
Per risolvere potresti usare una tabella di appoggio cone nello script che segue:
SELECT IDENTITY (int, 1, 1) AS NumeroRiga, campo INTO #temp FROM tabella SELECT campo FROM #Temp where NumeroRiga=2 DROP TABLE #Temp
Valore 2
e ritorna la la seconda riga
http://www.codeproject.com/Articles/39033/Row-Numbers-in-SQL-Query-Microsoft-SQL-Server-2000Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!- Proposto come risposta GastoneCanali mercoledì 6 giugno 2012 21:49
- Contrassegnato come risposta AngeloNew venerdì 8 giugno 2012 07:45
-
E' una soluzione, che non posso usare direttamente nelle SQL Expression di Crystal Reports;
per utilizzarla debbo creare prima una funzione utente in SQL Server, che inglobi il tuo codice, per poi richiamarla da Crystal Reports:
vediamo se mi riesce...
-
Provando ad inglobare il tuo codice in una UDF, ottengo questo esito
Cannot access temporary tables from within a function
probabilmente non posso usare tabelle temporanee nelle UDF,
debbo procedere diversamente, usando un cursore o una variabile tabellare, vediamo...
-
Sì usando una variabile tabella funziona tutto correttamente, così :
CREATE FUNCTION [dbo].[udf_NumberOfRow] ( @nRow INT )
RETURNS DATETIME
AS
BEGIN
-- Declare the return variable here
DECLARE @Data DATETIME
'Dichiaro la variabile tabella
DECLARE @TabellaTemp TABLE (
NumeroRiga INTEGER IDENTITY(1,1),
Datastampa DATETIME
)
--Riempio la variabile tabella con i dati della tabella SSZ nell'ordine che mi interessa
INSERT INTO @TabellaTemp
SELECT DataUltStampa
FROM SSZ ORDER BY DataUltStampa DESC
--Estraggo il n° di riga che mi interessa
SELECT @Data = Datastampa FROM @TabellaTemp WHERE NumeroRiga = @nRow
-- Return the result of the function
RETURN @Data
END
GO
SELECT [dbo].[udf_NumberOfRow](5) as ValoreNRiga
GOCosì sembra funzionare tutto correttamente
-
non ti rimane che chiudere il 3d segnando la risposta ... ma quella giusta, nessuno avrebbe potuto scrivere la tua funzione! ;)
Ciao Gastone
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE! -
GRAZIE.
Gastone Canali >http://www.armadillo.it
Se alcuni post rispondono al tuo quesito (non necessariamente i miei), ricorda di contrassegnarli come risposta e non dimenticare di contrassegnare anche i post utili . GRAZIE!