Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    14

    Trovare un campo duplicato dentro una tabella

    Buongiorno a tutto il forum, provo a chiedere qui per un'esigenza lavorativa.

    Lavoro con un datamart aziendale all'interno del quale, attraverso un applicativo di frontend, eseguiamo delle analisi sui dati immagazzinati non usando direttamente il linguaggio SQL ma attraverso un "query builder" che facilita l'utente nella composizione della query.
    E' una bella facilitazione perchè semplifica molto la vita a chi non sa scrivere direttamente in SQL, però ha il difetto che non riesce a soddisfare alcune esigenze particolari, anche le più banali ... quali ad esempio trovare un campo duplicato dentro una tabella.

    Quindi, non appena c'è bisogno di una funzione un pò più complicata, non c'è altro modo che ricorrere al linguaggio nativo.

    Nel mio caso ho bisogno di eseguire una funzione che, nel linguaggio SQL, credo sia fra le più banali : trovare un campo duplicato dentro una tabella.

    Non posso ovviamente riportare qui dati e campi veri però provo a sintetizzare ed ha spiegare quello che vorrei fare, usando dei nomi di campi in qualche caso di fantasia.

    Ho una tabella dove ci sono riportati tutti i dati dei clienti ognuno dei quali ha un proprio codice identificativo univoco. La tabella è arricchita anche con altri dati .. mettiamo che un cliente possa appartenere ad una fascia di reddito. A questo punto la situazione potrebbe essere la seguente :

    Codice_cliente_1 - FASCIA ALTA
    Codice_cliente_2 - FASCIA MEDIA
    Codice_cliente_3 - FASCIA BASSA
    Codice_cliente_1 - FASCIA MEDIA

    Quindi il problema è che io devo intercettare quei clienti che erroneamente, risultano contemporaneamente in più fasce di reddito, come il "Codice_cliente_1" che è contemporaneamente sulla fascia ALTA e MEDIA.

    Se faccio un semplice elenco dei due campi con il "query builder" la relativa sintassi SQL che ne esce è questa :

    SELECT
    [Codice_cliente]=[TABELLA_CLIENTI].[Codice_cliete]
    [FASCIA_REDDITO]=[TABELLA_CLIENTI].[FASCIA_REDDITO]
    FROM [DATABASEX].[dbo].[TABELLA_CLIENTI][TABELLA_CLIENTI]

    "DATABASEX" è il nome del db nel server che ospita i dati

    Dovrei quindi modificare la qry di cui sopra in modo da selezionare solamente i record in cui il campo [Codice_cliente] è ripetuto più volte perchè associato a più [FASCIA_REDDITO].

    Spero di essermi espresso in modo decente .. Grato se qualcuno mi può dare una mano.

    Leonardo

  2. #2
    ciao, dovresti indicare anche il dbms di riferimento.

    Comunque provo a scriverti una query che in generale dovrebbe andare bene su tutti i dbms

    SELECT Codice_cliente, MAX(FASCIA_REDDITO), count(*) as conteggio
    FROM TABELLA_CLIENTI
    GROUP BY(Codice_cliente)
    HAVING conteggio>1

    In sostanza raggruppa per codice cliente e ti tira fuori quelli che a parita di codice cliente compaiono piu di una volta
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    14
    Quote Originariamente inviata da bomberdini Visualizza il messaggio
    ciao, dovresti indicare anche il dbms di riferimento.

    Comunque provo a scriverti una query che in generale dovrebbe andare bene su tutti i dbms

    SELECT Codice_cliente, MAX(FASCIA_REDDITO), count(*) as conteggio
    FROM TABELLA_CLIENTI
    GROUP BY(Codice_cliente)
    HAVING conteggio>1

    In sostanza raggruppa per codice cliente e ti tira fuori quelli che a parita di codice cliente compaiono piu di una volta
    Innanzi tutto grazie per la risposta.

    Sulla base dei suggerimenti ho provato a modificare la query così :

    SELECT
    [Codice_cliente]=[TABELLA_CLIENTI].[Codice_cliente],
    max ([FASCIA_REDDITO]=[TABELLA_CLIENTI].[FASCIA_REDDITO]),
    count (*) as CONTEGGIO
    FROM [DATABASEX].[dbo].[TABELLA_CLIENTI][TABELLA_CLIENTI]
    GROUP BY ([TABELLA_CLIENTI].[Codice_cliente])
    HAVING CONTEGGIO>1

    Il "query builder" tramite lo strumento "Verifica Sintassi" dice che la sintassi è OK però quando la eseguo dice .. Incorrect syntax near '='

    Prima mi dice che è ok e poi mi da l'errore ... bah ... non so che fare

  4. #4
    Quote Originariamente inviata da leokid71 Visualizza il messaggio
    Incorrect syntax near '='
    Nella query che ti ho postato non ce nessun =

    Ed in effetti ti dice che la query e' ok.

    Probabilmente il problema e' da ricercare in qualche altro punto
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2005
    Messaggi
    14
    Si si lo so che nella tua query non ci sono " = " .. però nella sintassi dell'SQL mio originale ci sono e non posso ignorarli .. nel primo post ho riportato quella che è la sintassi della semplice query per l'elenco dei campi, query che ho cercato di riadattare con i tuoi suggerimenti.

    Solo che con le tue aggiunte quell' " = " che prima non da noia ora da errore .. boh .. non so

  6. #6
    Quote Originariamente inviata da leokid71 Visualizza il messaggio
    ... FROM [DATABASEX].[dbo].[TABELLA_CLIENTI][TABELLA_CLIENTI] ...
    certo che come alias di tabella è proprio utile

  7. #7
    Quote Originariamente inviata da leokid71 Visualizza il messaggio
    SELECT [Codice_cliente]=[TABELLA_CLIENTI].[Codice_cliente]...
    e, onestamente, non ho mai visto una SELECT così... a cosa serve?

  8. #8
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Non mi è chiaro il tipo di sintassi che stai usando ma provando ad immaginare che quel (ad esempio) "[Codice_cliente]=" che metti prima di [TABELLA_CLIENTI].[Codice_cliente] sia una specie di alias (e così via per tutti gli altri) allora non mi torna la parte "max ([FASCIA_REDDITO]=[TABELLA_CLIENTI].[FASCIA_REDDITO])"

    Hai provato a mettere [FASCIA_REDDITO]=max(TABELLA_CLIENTI].[FASCIA_REDDITO]) ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.