Newsgroup: it.comp.appl.access
Titolo: Estrarre dati che danno una certa somma da Excel, Access o SQL Server

Buongiorno a tutti,
ho il seguente problema: ho una lista di valori la cui somma è pari ad un 
certo numero (es. 5326,57). Fra questi valori, voglio evidenziare quelli la 
cui somma è il più vicino possibile ad un certo valore (per esempio 500). 
Esiste un modo per farlo, in Excel, Access o SQL Server?
Grazie 

 Grazie
Non ho ben capito in che maniera rendi disponibili questi dati, ma penso che 
una buona soluzione sia una
bella procedura ricorsiva che provi ad eseguire prima la selezione di tutti 
i valori vicini a 500, popi tutte le
somme possibili partendo da due addendi fino a tutti gli addendi. Si 
caricano i risultati in una tabella e poi da lě
ti giostri come vuoi. Certo č da studiare un bel sistema per risalire, una 
volta individuati i risultati, quali erano gli
addendi che lo hanno generato, certo tutto sta a sapere di quanti addendi 
stiamo parlando (10, 100, 1000, di piů)?
Saluti
Michele 

Asheric ha scritto:

Innanzitutto credo ci sia un minimo di confusione in quanto dici...!
Excel, Access e SQL_Server sono 3 cose troppo diverse per compararle.
SQL_Server non ha interfaccia utente, è solo un RDBMS(interfacciabile
con Access)
Access è composto da JET+Access(interfaccia)
Excel proprio non è un Database, e qui è decisamente OT
Con Access fare quello che chiedi è semplice, basta realizzare una
Query nella quale
crei un Campo di tipo Boolean(True/False) che confronta la Somma con il
tuo NumeroRiferimento:
Se Abs(Somma-NumeroRiferimento)<Range Campo=Vero
che tradotto:
NomeCampo:IIF(Abs(Somma-NumeroRiferimento)<Range;True;False)
Ora in una Maschera a visualizzazione continua abiliti la formattazione
Condizionale
che prenderà in considerazione il Campo creato nella Query "NomeCampo"
ed applicherà
per NomeCampo=True la formattazione ai controlli che hai destinato...!
@Alex

 ha scritto nel messaggio 
news:1157196533.8...@h48g2000cwc.googlegroups.com...


 Asheric ha scritto:
Forse sono io che non riesco a capire bene. Innanzitutto ci devi dire se 
questa somma deve essere obbligatoriamente
ottenuta prendendo solo coppie di valori oppure se è lecito prenderne 1 o 
più di 2 (fino a tutti se necessario)
Seconda cosa ci devi dire quanto è lunga questa lista di valori, se i valori 
rimarranno sempre gli stessi o se cambieranno.
E soprattutto, in uscita, vuoi una lista di valori, o vuoi una tabella dove 
magari affiancati ai valori ci sia una casella Si/No che marcherà la 
selezione del record?
Devi essere più esauriente
Michele 

 Grazie
Allora non ho capito cosa aveva a che vedere Excel e biglie varie.....!
E se fossero 3 i records da sommare per ottenere 25....?
Le specifiche che hai dato sono troppo generiche, implementare una
funzione
che cicla il Recordset alla ricerca di un record piuttosto che di N i
quali sommati
danno 25(XX per generalizzare) è decisamente diversa...., credo che
tra le altre
cose, per motivi di velocità non convenga lavorare con Recordset, ma
direttamente con
una Matrice precaricata in memoria con i valori ricavati dal
Recordset...!
In sostanza si tratta di ciclare la Matrice, che io farei
Mondimensionale ma su una
variabile di Tipo:
Private Type MyField
      ID_PK As Long
      Valore As TuoTipoDato
End Type
Private mt() as MyField
Ora la carichi ciclando il Recordset, quindi inizi l'algoritmo di
calcolo partendo dal primo
all'ultimo, poi dal 2° all'ultimo, poi dal 3° all'ultimo....sempre
che tu non voglia ipotizzare la somma di N records come ti dicevo
prima....!
@Alex

 ha scritto nel messaggio 
news:1157200021.5...@m79g2000cwm.googlegroups.com...
Asheric ha scritto:






Private mt() as MyField

@Alex
nel caso di N records, una soluzione potrebbe anche essere quella di 
utilizzare una variabile long ogni 30 records (per esempio, 80 records, 3 
variabili) ed utilizzare il singolo bit come marcatore per ogni record. Per 
esempio, se abbiamo 25 records, e il contatore incrementale di uno è 
arrivato al numero 11256, significa che:
11256  binario 10101111111000
Cioè il numero 11256 corrisponderà alla somma dei records che hanno il bit 
postato a 1, cioè il n. 4,5,6,7,8,9,10,12 e 14
Così si è sicuri, una volta arrivati a 2^26-1 (che sarà l'ultimo valore per 
l'incremento, 67.108.863 bin 1111111111111111111111111) di aver eseguito 
tutte le combinazioni possibili
Michele

 Michele
In questo caso non credo si possa parlare di Combinazioni(nel senso che
mi pare di aver intuito nella tua ipotesi) ma semplicemente di
tentativi di somma incrementale.
1° + 3° + 125° corrisponde a 125°+1°+3° e non è da fare
La somma in matematica gode della proprietà commutativa e di questo è
bene tenerne conto quando si sviluppano queste routine che per forza di
cose sono sempre una palla
al piede.... per lentezza e rischio Bugs..!
In questo caso a mio avviso la cosa semplice è proprio partire dal 1°
e man mano
scalare a +1 evitando inutilmente combinazioni già calcolate...,
quindi è inutile riprendere dal 1° Record(o indice se usiamo matrici)
quando questo è già stato oggetto di calcolo
su tutti gli indici seguenti.
@Alex

Scusate, troppa fretta
.........Così si è sicuri, una volta arrivati a 2^25-1 (che sarà l'ultimo 
valore per
 l'incremento, 33.554.431 bin 1111111111111111111111111) di aver eseguito


 esempio, se abbiamo 25 records, e il contatore incrementale di uno è
[CUT]
In questo caso non credo si possa parlare di Combinazioni(nel senso che
mi pare di aver intuito nella tua ipotesi) ma semplicemente di
tentativi di somma incrementale.
@Alex
Si, forse combinazioni non è la parola esatta.
Il sistema di utilizzare il codice binario mette al riparo da fare somme 
inutili (per la prop. comm.) in quanto ogni numero ha una e una sola 
rappresentazione binaria.
Se poi nella tabella ci sono due o più valori uguali, questo è un altro paio 
di maniche.
E' da intendere che ogni bit comunque rappresenta uno e un solo record (bit 
1, primo record, bit 2, secondo record e via così) e data l'incrementalità 
dell'intero lungo, è impossibile che si vengano a creare situazioni di somme 
ripetute.
Se poi ho 5 valori identici (per esempio 100) nulla mi vieta di fare 
100+....+100 per ottenere 500, ma questo succederà una e una sola volta nel 
ciclo incrementale.
Sta poi a chi utilizza, la decisione o meno di ripetere i numeri, possono 
sempre rappresentare 5 pezzi uguali nello scaffale.
cnt   val
1    100
2    50
3    100
4    100
5    100
6    85
7    25
8    100
Sopra la somma dei 100 si otterrà con il binario10011101 in corrispondenza 
del numero 157 del contatore e basta.

 nel caso di N records, una soluzione potrebbe anche essere quella di
[CUT]
In questo caso non credo si possa parlare di Combinazioni(nel senso che
@Alex
Comunque ha ragione anche Alex a proposito della proprietà commutativa. Ho 
male interpretato le sue parole. Aggiungo a quanto detto che dei 5 numeri 
uguali nell'esempio, se nella tabella avessi anche un 400, si otterrebbero 5 
risultati uguali, ovvero 400+100=500 per 5 volte, tante quente i 100. Al 
lato teorico va anche bene, perchè ogni 100 è a se stante, ma al lato 
pratico mi troverei centinaia di risultati inutili.
Bisogna lavorarci un pò su....................