Ordinare un campo al suo interno durante una select

di il
7 risposte

Ordinare un campo al suo interno durante una select

Ciao 

sto provando ad ordinare un campo stringa che contiene ("elem1-elem2-elem3") durante una queri facendo in modo che gli elementi separati da “-” siano ordinati all'interno di un campo, ma non riesco a risolvere.

Select nomecampo1 , nomecampo2 (contiene al suo interno  ("elem1-elem2-elem3")) , nomecampo3 from tabella 

A qualcuno è capitato ?

Ringrazio chi vuole provare a darmi qualche dritta.

7 Risposte

  • Re: Ordinare un campo al suo interno durante una select

    Questo problema evidenzia una cattiva progettazione del DB. Quel campo dovrebbe avere un solo valore e non 3

  • Re: Ordinare un campo al suo interno durante una select

    22/02/2023 - oregon ha scritto:


    Questo problema evidenzia una cattiva progettazione del DB. Quel campo dovrebbe avere un solo valore e non 3

    Si lo so, infatti faccio miracoli per interrogarlo, è nato per essere gestito da tecnologia microsoft pq piu flessibile in questi casi ma lenta nell elaborazione. 

    Mi sa che non c e una soluzione per questo problema.

    Non ho chiaro se su mysql è possibile creare una procedura e poi riutilizzarla come funzione all interno di una query 

  • Re: Ordinare un campo al suo interno durante una select

    Non è questione di quale DBMS usi. La struttura è sbagliata e deve essere corretta e normalizzata 

  • Re: Ordinare un campo al suo interno durante una select

    Non è possibile bisogna adeguarsi 

  • Re: Ordinare un campo al suo interno durante una select

    Fallo nella tua applicazione (nel linguaggio che utilizzi)

    Oppure con una Stored Procedure

    Non lo puoi fare con una semplice query

  • Re: Ordinare un campo al suo interno durante una select

    Si, stavo realizzando che non c'è altra soluzione, c'avevo sperato.

    Grazie

  • Re: Ordinare un campo al suo interno durante una select

    Salve,

    [OT]

    al di la' che “sia una cosa bruttissima”, in T-SQL si puo' fare, ad esempio con STRING_SPLIT(..) + STRING_AGG (…) WITHING GROUP (ORDER BY ….)

    sicuramente “pesante” dal punto di vista computazionale visto che OGNI riga deve essere scomposta in sotto insiemi di CampoX per poi riaggregare questi insiemi per valore ordinato…. ma si puo' fare…

    DECLARE @t TABLE (Id int, Campo2 varchar(50));
    INSERT @t
     VALUES ( 1, '' )
     , ( 2, 'elemento2-elemento1' )
     , ( 3, 'elemento2-elemento3-elemento1' );
    
    WITH cteSplit AS (
     SELECT t.Id
       , value AS SplitValue
       FROM @t t
       		CROSS APPLY STRING_SPLIT(t.Campo2, '-')
       ),
    cteOrd AS (
     SELECT Id, STRING_AGG(SplitValue, '-') WITHIN GROUP (ORDER BY SplitValue ASC) AS SplitValueOrdered
       FROM cteSplit
       GROUP BY Id
     )
     SELECT t.*
       , c.SplitValueOrdered
       FROM @t t
         LEFT JOIN cteOrd c ON c.Id = t.Id
       ORDER BY t.Id;

    [/OT]

    quindi, forse si puo' fare anche in MySql…. cio' non toglie che, come gia' detto, e' molto sbagliato :D

    salutoni romagnoli
    – 
    Andrea

Devi accedere o registrarti per scrivere nel forum
7 risposte