3.939 messaggi dal 28 gennaio 2003
Ho una tabella in database, per esempio regioni, con id_regione, numerico e nome_regione, stringa.


Dato un id_regione vorrei trovare l'indice (partendo da 0) del risultato del'sql SELECT ID_REGIONE FROM REGINI ORDER BY ID_REGIONE

io ho messo il risultato della query in un vettore di interi, poi ho usato indexof per trovare l'indice.

non è che esista un metodo alternativo, magari più efficiente, non so, forse con linq per risolvere il problema?

ciao
98 messaggi dal 13 febbraio 2016
Ciao Pietro,
un'alternativa sarebbe quella di utilizzare la funzione SQL: ROW_NUMBER().
SELECT [IdUtente]
      ,[Nomeutente]
      ,ROW_NUMBER() OVER(ORDER BY IdUtente) AS RowIndex
  FROM [TbUtenti]

Questa query restituisce una colonna in più (RowIndex) con il valore dell'indice della riga, partendo però da 1.

Ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
Se ti interessa conoscere solo l'indice di un'id_regione in particolare puoi anche fare così:
SELECT COUNT(*) FROM REGIONI WHERE ID_REGIONE < @id_regione

Enjoy learning and just keep making
3.939 messaggi dal 28 gennaio 2003
Un'altra possibilità, grazie!
3.939 messaggi dal 28 gennaio 2003
BrightSoul ha scritto:
Se ti interessa conoscere solo l'indice di un'id_regione in particolare puoi anche fare così:
SELECT COUNT(*) FROM REGIONI WHERE ID_REGIONE < @id_regione


una domanda:
la query non è necessariamente ordinata per id_regione, ma è ordinata magari per un altro campo, magari stringa.
Ho il dubbio che la condizione where id_regione < xxx non funzioni
11.886 messaggi dal 09 febbraio 2002
Contributi
sì, quella soluzione risponde solo al caso iniziale che avevi posto, ovvero con i risultati ordinati in maniera ascendente per ID_REGIONE.

Per criteri di ordinamento più complessi puoi o ricondurli ad un'espressione booleana, in modo che tu possa usare il COUNT(*) come nel precedente esempio, oppure prova con la soluzione di pillopo, che ti lascia indicare i criteri di ordinamento con la ORDER BY.

ciao,
Moreno
Modificato da BrightSoul il 28 aprile 2016 08.03 -

Enjoy learning and just keep making
3.939 messaggi dal 28 gennaio 2003
bene, con i vostri suggerimenti ho trovato questo, e funziona:

select b.rowindex from (select (rownum - 1) as rowindex, a.id_regione from (select id_regione, nome_regione from regioni where id_regione > 0 order by lower(nome_regione)) a) b where b.id_regione = 10


in pratica, prendo in considerazione solo le regioni con id > 0, la ordino secondo nome e, dalla lista trovo l'indice dell'elemento con id=10

avendo un datatable è un poco più facile.

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.