none
Aiuto per query RRS feed

  • Domanda

  • Ciao a tutti, avrei bisogno di aiuto per strutturare una query.

    Ho 3 tabelle:

    aaalogin: i campi coinvolti sono name e login_id

    domain_users: i campi coinvolti sono sam_account_name e mobile_number. domain_users.sam_account_name = aaalogin.name

    sspverificationcodeenrollment: i campi sono login_id, registered_contact_value e contact_mode. il login_id è collegato al login_id della aaalogin e per ogni login ci possono essere multipli registered contact value. In aggiunta, mi interessa prendere solo quelli dove il contact_mode è ='mobile'.

    dovrei mettere su una query che per ogni sam_account_name mi dia in una seconda colonna i valori presi da mobile_number (per ogni sam ce n'è uno) e in una terza colonna i multipli valori ricavati dalla tabella sspverificationcodeenrollment, separati da un carattere (diciamo ;), ovviamente laddove presenti.

    Qualche suggerimento? Grazie



    Dario Palermo

    giovedì 25 febbraio 2021 11:38

Risposte

  • Ciao,

    se stai utilizzando una versione sql server >= 2017 puoi usare questo costrutto:

    select	DU.sam_account_name
    		,DU.mobile_number 
    		,L.login_id
    		,(select STRING_AGG(registered_contact_value, ';')  from dbo.sspverificationcodeenrollment as SSP where SSP.login_id= L.login_id and SSP.contact_mode= N'mobile') as registered_contact_value
    from	dbo.domain_users as DU 
    inner	join dbo.aaalogin as L on DU.sam_account_name=L.name
    

    Viceversa puoi fare riferimento p.es. a questo articolo che illustra come aggregare stringhe di una subquery con il costrutto FOR XML.

    G.

    • Contrassegnato come risposta Dario Palermo giovedì 25 febbraio 2021 16:25
    giovedì 25 febbraio 2021 15:40

Tutte le risposte

  • Ciao,

    se stai utilizzando una versione sql server >= 2017 puoi usare questo costrutto:

    select	DU.sam_account_name
    		,DU.mobile_number 
    		,L.login_id
    		,(select STRING_AGG(registered_contact_value, ';')  from dbo.sspverificationcodeenrollment as SSP where SSP.login_id= L.login_id and SSP.contact_mode= N'mobile') as registered_contact_value
    from	dbo.domain_users as DU 
    inner	join dbo.aaalogin as L on DU.sam_account_name=L.name
    

    Viceversa puoi fare riferimento p.es. a questo articolo che illustra come aggregare stringhe di una subquery con il costrutto FOR XML.

    G.

    • Contrassegnato come risposta Dario Palermo giovedì 25 febbraio 2021 16:25
    giovedì 25 febbraio 2021 15:40
  • Avevo provato con FOR XML ma non mi riusciva, ottenevo le righe nel formato desiderato ma non riuscivo a filtrare i doppioni. Ho provato la tua soluzione valida per v2017 e superiori e funziona perfettamente, grazie!

    ciao


    Dario Palermo

    giovedì 25 febbraio 2021 16:27
  • nella terza colonna della query vorresti avere tutti i campi di tutti i record cha matchano il sam_account_name ?

    non ti sembra un po' cofnusionario ?

    ti andrebbero bene query distinte ?


    Edoardo Benussi
    e[dot]benussi[at]outlook[dot]it

    lunedì 1 marzo 2021 11:24
    Moderatore
  • In realtà la differenza è solo la provenienza del dato. Su Active Directory viene preso il campo "mobile" dell'utente (se presente), poi vengo aggiunti eventuali ulteriori numeri nell'altra tabella qualora l'utente faccia la registrazione direttamente su questo software. Alla fine la query mi serve per avere una lista dei numeri registrati per ogni singolo utente e, quindi, la provenienza degli stessi mi interessa relativamente. Potrebbe essere invece utile anteporre rispetto ad ogni singolo valore una lettera, tipo A se è il numero preso da Active Directory e P se viene dal software...

    ciao,


    Dario Palermo

    lunedì 1 marzo 2021 11:29