11 messaggi dal 22 gennaio 2014
Buongiorno,
ho un problema che spero qualcuno possa risolvermi in pratica ho una query che mi estrapola dei dati, in un campo ci sono dei doppioni che vorrei eliminare in base ai valori del campo "minDiPRIORITA" mostrandomi solo i valori con il numeno piu' basso.
il codice che uso e' il seguente:
SELECT DISTINCT ELENCO_MAT_RICH.DENOMINAZIONE_MATERIALICampo, First(PRIORITA_FORNITORE.PRIORITA) AS PrimoDiPRIORITA, PRIORITA_FORNITORE.CODICE_SISME_CERICO, First(CONSISTENZE.NUC) AS PrimoDiNUC, ELENCO_MAT_RICH.QTA_RICH, ELENCO_MAT_RICH.RIF_RICH_CM10, Sum([CARICO]-([SCARICO]+[QTA_PRENO])) AS QTA_DISP
FROM (ELENCO_MAT_RICH LEFT JOIN CONSISTENZE ON ELENCO_MAT_RICH.DENOMINAZIONE_MATERIALICampo = CONSISTENZE.DENOM) LEFT JOIN PRIORITA_FORNITORE ON CONSISTENZE.COD_SISME = PRIORITA_FORNITORE.CODICE_SISME_CERICO
GROUP BY ELENCO_MAT_RICH.DENOMINAZIONE_MATERIALICampo, PRIORITA_FORNITORE.CODICE_SISME_CERICO, ELENCO_MAT_RICH.QTA_RICH, ELENCO_MAT_RICH.RIF_RICH_CM10, PRIORITA_FORNITORE.codice_sisme_REPARTO
HAVING (((ELENCO_MAT_RICH.RIF_RICH_CM10)=?) AND ((Sum([CARICO]-([SCARICO]+[QTA_PRENO])))>0) AND ((PRIORITA_FORNITORE.codice_sisme_REPARTO)=? Or (PRIORITA_FORNITORE.codice_sisme_REPARTO) Is Null))
ORDER BY ELENCO_MAT_RICH.DENOMINAZIONE_MATERIALICampo, First(PRIORITA_FORNITORE.PRIORITA), PRIORITA_FORNITORE.CODICE_SISME_CERICO, First(CONSISTENZE.NUC);
grazie per la disponibilita'.
Ciao,
lascio la risposta a chi è più bravo di me :) Intanto ti faccio guadagnare tempo:
Nell'attesa posso suggerirti di indentare la query ed eliminare tutto ciò che non è necessario per maggiore leggibilità (a meno che non sia tutto necessario)?
Secondo me la soluzione al tuo problema è l'over partition:
SELECT * from
(SELECT ROW_NUMBER() OVER(PARTITION BY <campo> ORDER BY minDiPRIORITA) AS [RowNumber], * from <tabella>) as t1 where rownumber > 1;

Ormai programmano tutti... ma la professionalità appartiene a pochi
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
soluzione molto elegante, manuel...
solo, mi pare debba essere
where rownumber = 1;

visto che richiede "..mostrandomi solo i valori con il numeno piu' basso"
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
Giusto!
Oggi sarà una bella giornata perché la mia soluzione è stata ritenuta valida da Andrea :D

PS - è stato un caso che avessi adoperato la stessa funzione proprio ieri...

Ormai programmano tutti... ma la professionalità appartiene a pochi
11 messaggi dal 22 gennaio 2014
Buongiorno,
Grazie per la disponibilità cmq sono alle primissime armi potresti essere più esplicito nel senso che in base alla mia query dove va inserita la tua funzione?
Grazie ancora
Al posto della tua query :D

Ormai programmano tutti... ma la professionalità appartiene a pochi

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.