Announcement

Collapse
No announcement yet.

RANK() - Ausgabe begrenzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • RANK() - Ausgabe begrenzen

    Moin,

    ich habe folgendes (konstruiertes) Problem:
    Ich möchte die Ausgabe der nachfolgenden Query ( Beispiel als Anlage ) auf die ersten 3 Ranks begrenzen. Soll heissen: Pro Mitarbeitergruppe die 3 Mitarbeiter, mit dem höchsten Umsatz.

    Code:
    WITH CTE_Umsatz ( MitGrpNr, MitNr, Betrag ) AS (
    	SELECT 
    		m.MitarbeiterGrpNr,	
    		u.MitarbeiterNr, 
    		Sum( u.Betrag )
    	FROM Umsatz u
    	JOIN Mitarbeiter m ON m.MitarbeiterNr = u.MitarbeiterNr
    	group by m.MitarbeiterGrpNr, u.MitarbeiterNr	
    )
    Select	MitGrpNr, 
    	MitNr, 
    	Betrag, 
    	RANK() Over (PARTITION by MitGrpNr Order by Betrag desc ) as ranks
    FROM CTE_Umsatz
    Ich bekomme momentan:
    Code:
    MitGrpNr    MitNr       Betrag                ranks
    ----------- ----------- --------------------- --------------------
    1           4           4,59                  1
    1           3           3,59                  2
    1           2           2,59                  3
    1           1           1,59                  4
    2           8           8,59                  1
    2           7           7,59                  2
    2           6           6,59                  3
    2           5           5,59                  4
    3           12          12,59                 1
    3           11          11,59                 2
    3           10          10,59                 3
    3           9           9,59                  4
    4           13          13,59                 1
    möchte aber gerne bekommen:
    Code:
    MitGrpNr    MitNr       Betrag                ranks
    ----------- ----------- --------------------- --------------------
    1           4           4,59                  1
    1           3           3,59                  2
    1           2           2,59                  3
    2           8           8,59                  1
    2           7           7,59                  2
    2           6           6,59                  3
    3           12          12,59                 1
    3           11          11,59                 2
    3           10          10,59                 3
    4           13          13,59                 1
    Hat jemand da eine pfiffige Idee?

    TIA,
    Karsten
    Attached Files

  • #2
    Ich weiß zwar nicht, ob derived tables zusammen mit deiner common table expression funktionieren, aber probiere doch mal ein

    select * from (
    WITH CTE_Umsatz ( ....
    RANK() Over (PARTITION by MitGrpNr Order by Betrag desc ) as ranks
    FROM CTE_Umsatz ) as X where ranks < 4

    bye,
    Helmut

    Comment


    • #3
      ohne CTE so:

      SELECT MitarbeiterGrpNr
      , MitarbeiterNr
      , Betrag
      , Ranks
      FROM (
      SELECT
      m.MitarbeiterGrpNr,
      u.MitarbeiterNr,
      Sum( u.Betrag ) AS Betrag,
      RANK() Over (PARTITION by m.MitarbeiterGrpNr Order by u.Betrag desc ) as ranks
      FROM Umsatz u
      JOIN Mitarbeiter m ON m.MitarbeiterNr = u.MitarbeiterNr
      group by m.MitarbeiterGrpNr, u.MitarbeiterNr, U.Betrag
      ) AS x
      WHERE RANKS < 4

      Comment


      • #4
        Tach schön,


        @hwoess:
        So etwas hatte ich auch schon probiert, funktioniert aber leider nicht, da er vor einem WITH ein Semikolon benötigt...

        @ebis:
        So klappt's. Was muss ich auch den komplizierten Weg gehen??
        Sag' mal: Hat Dein Name etwas mit der Firma in der Du arbeitest zu tun?


        Vielen Dank nochmal für Eure Hilfe,
        Karsten

        Comment


        • #5
          Originally posted by Rumtata View Post
          @ebis:
          Sag' mal: Hat Dein Name etwas mit der Firma in der Du arbeitest zu tun?
          Nö, hat er nicht...

          Comment

          Working...
          X