none
T-SQL Query con raggruppamento RRS feed

  • Domanda

  • Salve,

    dovrei creare una query che agisce su un largo numero di dati. L'obiettivo è questo:

    ho una serie di righe

    X1 YA1 YB1

    X1 YA2 YB2

    X2 YA3 YB3

    X3 YA4 YB4

    X3 YA5 YB5

    X3 YA6 YB6

    Vorrei come risultato una tabella che raggruppi le righe che hanno la prima colonna uguale e prenda per ogni gruppo solo la riga con YA minore.

    X1 YA2 YB2 (se YA2 < YA1)

    X2 YA3 YB3

    X3 YA4 YB4 (se YA4 < YA5 e YA4 < YA6)

    Nel caso gli YA fossero uguali prendo quello con YB maggiore.

    Come scrivereste la store procedure che esegue questo mapping?

    Grazie.

    giovedì 10 maggio 2012 16:53

Risposte

  • Una volta.

    Cmq ad onor di cronaca la soluzione è:

    ;WITH myCommonTableExpression AS (
    SELECT *, ROW_Number() OVER (PARTITION BY c1 ORDER BY c2 asc,c3 desc) AS RowNumber
    FROM prova

    )
    SELECT c1,c2,c3
    FROM myCommonTableExpression 
    WHERE RowNumber = 1

    giovedì 17 maggio 2012 14:32

Tutte le risposte

  • Ciao Mauro,

    riusciresti ad essere più chiaro? 

    Potresti fornire un'esempio concreto ?

    Ciao

    Luca


    Luca Ferrari http://tipsandtrickssqlserver.blogspot.com/

    giovedì 10 maggio 2012 18:07
  • Faccio un esempio pratico:

    righe origine:

    1 2 3

    1 3 4

    1 4 5

    2 1 1

    3 1 1

    3 5 6

    3 5 7

    4 2 4

    4 2 5

    darà come risultato:

    1 2 3 (fra tutti le prime colonne con 1 ho una seconda colonna con valore minore rispetto alle altre)

    2 1 1 (unica riga con 2 come prima colonna)

    3 1 1 (fra tutti le prime colonne con 3 ho una seconda colonna con valore minore rispetto alle altre)

    4 2 5 (fra le prime colonne con 4 ho la seconda colonna uguale => prendo la rigacon la terza colonna maggiore)

    Con una store procedure devo riempire la tabella con i risultati. Come posso fare?
    venerdì 11 maggio 2012 06:52
  • Permettici 2 domande:

    ________________________________________________________________

    __ In un caso simile:

        4  2  4
        4  2  5
        4  3  9
        4  2  5

    Il valore " vincente "  è  4  2  5
    ma lo prendi 1 volta o 2 volte ????

    _______________________________________________________________

    Nel caso lo prendessi 1 volta come ci comportiano con
    gli altri campi della tabella che non ci hai citato ?

    Oppure la tabella è composta solo dai 3 campi citati?

       


    • Modificato Mancini, domenica 13 maggio 2012 07:21
    domenica 13 maggio 2012 07:03
  • Una volta.

    Cmq ad onor di cronaca la soluzione è:

    ;WITH myCommonTableExpression AS (
    SELECT *, ROW_Number() OVER (PARTITION BY c1 ORDER BY c2 asc,c3 desc) AS RowNumber
    FROM prova

    )
    SELECT c1,c2,c3
    FROM myCommonTableExpression 
    WHERE RowNumber = 1

    giovedì 17 maggio 2012 14:32