SELECT CLassifica

di il
3 risposte

SELECT CLassifica

Buon di a tutti,
mi sto perdendo in una select che credevo semplice alla fine non riesco ad ottenere il risultato voluto.


Avendo la seguente tabella T_Value:
ID_Tab FName Value StepValue
1 Mario 10 5
2 Mario 9 4
3 Mario 3 1
4 Luca 2 1
5 Luca 1 1
6 Luca 3 2
7 Giorgio 5 4
8 Giorgio 6 2
9 Giorgio 7 6
10 Daniele 11 8
11 Daniele 4 2
12 Daniele 8 7
13 Daniele 12 5


Devo selezionare solo i Value più bassi per ogni FName
ID_Tab FName Value StepValue
1 Mario 10 5
2 Mario 9 4
3 Mario 3 1
4 Luca 2 1
5 Luca 1 1
6 Luca 3 2
7 Giorgio 5 4
8 Giorgio 6 2
9 Giorgio 7 6
10 Daniele 11 8
11 Daniele 4 2
12 Daniele 8 7
13 Daniele 12 5


Ottenendo questo risultato:
ID_Tab FName Value StepValue
5 Luca 1 1
3 Mario 3 1
11 Daniele 4 2
7 Giorgio 5 4

Cioe, per ogni "Fname" devo recuperare il migliore, cioè quello con "Value" più basso ed ordinarlo per Value crescente.

Grazie

3 Risposte

  • Re: SELECT CLassifica

    PS:...è sparita la formattazione, ma credo si capisca.
  • Re: SELECT CLassifica

    With tab
    as
    (
    SELECT * FROM (VALUES
    (1,'Mario',10,5)
    ,('2','Mario','9','4')
    ,('3','Mario','3','1')
    ,('4','Luca','2','1')
    ,('5','Luca','1','1')
    ,('6','Luca','3','2')
    ,('7','Giorgio','5','4')
    ,('8','Giorgio','6','2')
    ,('9','Giorgio','7','6')
    ,('10','Daniele','11','8')
    ,('11','Daniele','4','2')
    ,('12','Daniele','8','7')
    ,('13','Daniele','12','5')
    ) AS V([ID_Tab],[FName],[Value],[StepValue])
    )
    SELECT DISTINCT tab.[FName],B.* FROM tab
    CROSS APPLY
    (
    SELECT TOP(1) * FROM tab tab_all
    WHERE tab_all.FName = tab.FName
    ORDER BY Value
    ) B
    ORDER BY B.Value
  • Re: SELECT CLassifica

    Oppure meglio questa:
    with tab
    as
    (
    SELECT *,row = ROW_NUMBER() OVER(PARTITION BY V.FName ORDER BY V.Value) FROM (VALUES
    (1,'Mario',10,5)
    ,('2','Mario','9','4')
    ,('3','Mario','3','1')
    ,('4','Luca','2','1')
    ,('5','Luca','1','1')
    ,('6','Luca','3','2')
    ,('7','Giorgio','5','4')
    ,('8','Giorgio','6','2')
    ,('9','Giorgio','7','6')
    ,('10','Daniele','11','8')
    ,('11','Daniele','4','2')
    ,('12','Daniele','8','7')
    ,('13','Daniele','12','5')
    ) AS V([ID_Tab],[FName],[Value],[StepValue])
    )
    SELECT * FROM tab
    WHERE row = 1
    ORDER BY Value
Devi accedere o registrarti per scrivere nel forum
3 risposte