Ciao! io ho una query: "select [tis] from tabella where [disl]= " +testo.text;Solo che la colonna [disl] non ha un incremento di 1 quindi dovrei andare a prendere il valore [disl] più vicino al testo.text.Quale comando sql dovrei usare???
Ciao! io ho una query: "select [tis] from tabella where [disl]= " +testo.text;Solo che la colonna [disl] non ha un incremento di 1 quindi dovrei andare a prendere il valore [disl] più vicino al testo.text.Quale comando sql dovrei usare???
Scusa, di che tipo è il campo [disl]?
Il valore più vicino in che senso? Puoi fare qualche esempio?
Il campo [disl] sono dei double e anche tutti gli altri campi delle altre colonne.
nel textbox viene letto un int o un double che peró non sempre è presente in [disl].
per questo vorrei trovare il valore piu vicino di disl rispetto al textbox.
esempio
disl= 10,23,35,44
textbox 12
La query mi deve ritornare il valore di tis dove disl =10(quindi il valore piu vicino a 12)
spero di essermi spiegato
grazie
Prova così (sostituisci textbox con la variabile contenente il valore di input) :
SELECT TOP 1 [TIS], DELTA FROM (
SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
WHERE C<TEXTBOX
UNION
SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
WHERE C>TEXTBOX
) D
ORDER BY [TIS].DELTA
Grande! Grazie. Stasera ci provo e ti faccio sapere
Scusa ma rileggendo non mi è molto chiara.
il nome della mia tabella dov e? E il campo disl?
scusa ma con le query sono agli inizi
Ho preso il nome delal tabella [tis] e del campo [disl] dalla query che hai indicato tu all'inizio.
Non conoscendo il linguaggio con cui devi eseguire la query le la descrivo nei vari passaggi, poi a te tradurla:
--seleziona il più grande tra i minori
SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
WHERE C<TEXTBOX
--unisce i due risultati in un unico recordset
UNION
--seleziona il più piccolo tra i maggiori
SELECT TOP 1 [TIS], ABS([TIS]-TEXTBOX ) AS DELTA FROM [TIS]
WHERE C>TEXTBOX
a questo punto, prendi il valore con delta minore
SELECT TOP 1 [TIS], DELTA FROM (
ordinando il risultato per delta
) D
ORDER BY [TIS].DELTA
Ultima modifica di sierra; 28-07-2014 a 08:58
Forse mi son spiegato male:
nome tabella: tabella
none campi: tis , disl
Idtextbox:textbox
??????
e poi Delta che vuol dire?
Scusami, ho scritto male io i nomi. Il medoto di estrazione è quello indicato sopra, crei due select che estraggano in base al valore di testo.text i valori più vicini (sia maggiore che minore).
unisci le due query con UNION.
Calcoli un nuovo campo chiamato DELTA, formato dalal differenza fra il campo [disl] e testo.text. Tutto in valore assoluto ABS(...).
A questo punto ottieni un risultato con due record. Composti da due campi, il campo che ti interessa e il capo delta, che mostra la differenza in valore assoluto fra il valore testo.text e il valore [disl].
A questo punto prendi il primo valore TOP 1 ordinando per il campo delta, ovvero prendi il record con differenza minima in valore assoluto.
Ti ringrazio per la pazienza.
stasera mi ci metto e vedo di provare.
grazie mille
ti aggiorno