Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[SQL] errore all'esecuzione della query

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[SQL] errore all'esecuzione della query

Messaggioda GraziaR. » lun nov 13, 2006 7:41 pm

Nel momento in cui eseguo una query con la funzione DISTINCT mi visualizza l'errore 3085 che dice che la funzione non è definita nell'espressione. In Access l'ho scritta in questo modo:
SELECT SUM(DISTINCT(Com_Costo))
From Componenti;
in modo tale che quando gira vengano tutti i costi diversi dei componenti sommati tra di loro. Praticamente DISTINCT elimina i costi duplicati cioè doppi, mentre SUM somma i costi diversi. qual è l'errore nel codice SQL che ho appena scritto?
Avatar utente
GraziaR.
Neo Iscritto
Neo Iscritto
 
Messaggi: 10
Iscritto il: sab nov 04, 2006 8:32 pm
Località: Ruvo di Puglia (BA)

Messaggioda Ices_Eyes » lun nov 13, 2006 7:59 pm

E cosa centra con sicurezza??? [sbigot]

Comunque sia DISTINCT è una parola chiave di SQL, e non una funzione, per cui scritta così non ha alcun senso.... La query che ti serve non so se possa essere scritta così:
Codice: Seleziona tutto
SELECT DISTINCT SUM(Com_Costo) FROM Componenti


Ma forse più corretta è:
Codice: Seleziona tutto
SELECT SUM(costo) FROM (SELECT DISTINCT Com_Costo FROM Componenti) AS t
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

codice esatto sql query

Messaggioda GraziaR. » mar nov 14, 2006 3:34 pm

Entrambe le soluzioni non funzionano, soprattutto la seconda perché dopo from vanno solo i nomi dele tabelle. Select deve visualizzare la somma dei costi diversi dei componenti quando gira. Se, per esempio, ci sono due costi 50000, nella somma ne viene conteggiato solo uno e quest'ultimo viene sommato agli altri purchè questi non siano duplicati. Quindi distinct visualizza i costi unici eliminando i valori doppi, mentre sum fa la somma dei costi unici, cioè diversi tra loro senza che si ripetino nella somma. La query che ho suggerito prima è esatta perché nella traccia del compito c'è la soluzione. Il problema è che non gira e quindi alla sua esecuzione mi dà l'errore 3085. Vorrei sapere se è necessario definire la funzione distinct. Se è così come? E, inoltre, come risolvere l'errore 3085? La query della traccia è la seguente: chiede di sommare i costi diversi di tutti i componenti. Il campo da utilizzare è Com_Costo. Applicare a Com_Costo prima distinct e poi sum. Quindi distinct va tra parentesi dopo sum.
La soluzione è la seguente:
SELECT SUM(DISTINCT Com_Costo)
FROM Componenti.
SUM E DISTINCT SONO OPERATORI AGGREGATI. Componenti è la tabella.
Avatar utente
GraziaR.
Neo Iscritto
Neo Iscritto
 
Messaggi: 10
Iscritto il: sab nov 04, 2006 8:32 pm
Località: Ruvo di Puglia (BA)


Messaggioda Robby78 » mer nov 15, 2006 11:30 am

propongo un:

Codice: Seleziona tutto
Select sum(Com_Costo) FROM Componenti Where Com_Costo in (SELECT DISTINCT Com_Costo FROM Componenti)
Povera patria! Schiacciata dagli abusi del potere di gente infame, che non sa cos'è il pudore - Franco Battiato
ricordati di pensare! - mia mamma
Avatar utente
Robby78
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 3829
Iscritto il: gio gen 08, 2004 5:25 pm
Località: Emilia Romagna

Messaggioda Ices_Eyes » mer nov 15, 2006 11:40 am

Le query funzionano tutte, anche quella con SUM(Distinct...) provate su postgres...Nella clausola FROM puoi metterla una select, senza grossi problemi, basta specificarne un alias (è così che funzionano le viste).

Il motivo per cui ti da errore sinceramnete non lo saprei...potrebbe essere che o la SELECT SUM(DISTINCT...) non è standard di SQL, ma comunque permessa da Postgres, e quindi non va in ACCESS, oppure, più semplicemente, ACCESS non la implementa...non sarebba la prima cosa... [;)]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

query sql

Messaggioda GraziaR. » mer nov 15, 2006 10:34 pm

Ices_Eyes ha scritto:Le query funzionano tutte, anche quella con SUM(Distinct...) provate su postgres...Nella clausola FROM puoi metterla una select, senza grossi problemi, basta specificarne un alias (è così che funzionano le viste).

Il motivo per cui ti da errore sinceramnete non lo saprei...potrebbe essere che o la SELECT SUM(DISTINCT...) non è standard di SQL, ma comunque permessa da Postgres, e quindi non va in ACCESS, oppure, più semplicemente, ACCESS non la implementa...non sarebba la prima cosa... [;)]


Avevi ragione perché la seconda istruzione che definisci più corretta gira in Access senza creare errori. E' vero che mettendo la ridenominazione al select dopo from funziona la query. Purtroppo non avevo mai visto un esempio di questa query, perciò non potevo essere sicura dell'attendibilità del tuo suggerimento. Però l'esercizio può essere anche risolto facendo una query di creazione tabella col distinct e poi un'altra query col sum. Però con la tua soluzione creo una sola query. Quale dei due risultati mi consigli?
Avatar utente
GraziaR.
Neo Iscritto
Neo Iscritto
 
Messaggi: 10
Iscritto il: sab nov 04, 2006 8:32 pm
Località: Ruvo di Puglia (BA)


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising