none
Hilfe bei Abfrage RRS feed

  • Frage

  • Hallo an alle,

    ich habe hier ein Problem wo ich doch hoffe das ihr mir helfen könnt.

    Art. Nr       Preis           Typ

    1                15              B

    2                 25             A

    2                 20             B

    3                 15             A

    3                 45             B

    Ich möchte alle B Werte haben mit gruppieren komme ich hier nicht weiter. Gibt es hier nicht einen schönen Praktikablen Ansatz?


    Dienstag, 30. Januar 2018 08:12

Antworten

  • Hallo Stefan,

    das ORDER BY ArtNr bei der ROW_NUMBER() Window Function ist zu viel. Hier reicht das ORDER BY Typ DESC.

    Dafür würde ich ein ORDER BY ArtNr ans Ende des Statements setzen!

    Am Ergebnis ändert das freilich nichts! :-)


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Dienstag, 30. Januar 2018 12:07
    Beantworter
  • Hi,

    probier es mal hiermit.

    WITH Query AS
    (
    SELECT *,
           ROW_NUMBER() OVER( PARTITION BY ArtNr ORDER BY ArtNr, Typ DESC ) AS RowNumber
    FROM   <Tabelle>
    )
    SELECT *
    FROM   Query
    WHERE  RowNumber = 1

    Dennoch wäre es immer hilfreich, wenn Du das gewünschte Ergebnis auch posten würdest.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 30. Januar 2018 10:17
    Moderator

Alle Antworten

  • Hi,

    es wäre hilfreich, wenn Du das gewünschte Ergebnis anhand deiner Beispieldaten aufgezeigt hättest.

    So vermute ich mal, dass Du einfach eine WHERE Klausel auf Typ = 'B' brauchst.

    SELECT ...
    FROM   <Tabelle>
    WHERE  Typ = 'B'


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 30. Januar 2018 08:36
    Moderator
  • Hallo Toot

    nach was möchtest du denn gruppieren? Wenn du nur alle B Werte haben möchtest wäre 

    select * from TABELLE
    Where typ = 'B'
    order by ArtNr
    Oder
    select * from TABELLE
    order by Typ


    Benjamin Hoch
    MCSE: Data Platform & Data Management and Analytics
    MCSA: SQL Server 2012/2014 & 2016 DB Administration
    MCSA: Windows Server 2012


    war zu langsam :(
    Dienstag, 30. Januar 2018 08:44
  • Entschuldigung es fehlt noch ein entscheidender Punkt:

    Art. Nr       Preis           Typ

    1                15              B

    2                 25             A

    2                 20             B

    3                 15             A

    3                 45             B

    4                 90             A

    Ich habe auch noch den Fall das Art. Nr 4. Das Ziel ist es Wenn A oder B für eine Art. Nr vorhanden sind, dann soll B genutzt werden. Ist nur A (siehe Beispiel Art. Nr 4) vorhanden soll A genutzt werden.

    Nochmals Entschuldigung. Das war von mir zu voreilig der Post. Ich habe das Beispiel nicht richtig durchdacht.

    Dienstag, 30. Januar 2018 10:01
  • Hi,

    probier es mal hiermit.

    WITH Query AS
    (
    SELECT *,
           ROW_NUMBER() OVER( PARTITION BY ArtNr ORDER BY ArtNr, Typ DESC ) AS RowNumber
    FROM   <Tabelle>
    )
    SELECT *
    FROM   Query
    WHERE  RowNumber = 1

    Dennoch wäre es immer hilfreich, wenn Du das gewünschte Ergebnis auch posten würdest.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 30. Januar 2018 10:17
    Moderator
  • Hallo Stefan,

    das ist ein guter Einwand! Dem komme ich gerne nach.

    Ergebnis:

    Art. Nr       Preis           Typ

    1                15              B

    2                 20             B

    3                 45             B

    4                 90             A

    Wie schon beschrieben. Wenn A und B vorhanden dann soll nur B ausgegeben werden. Wenn nur ein Typ vorhanden ist dann nur eben dieser. In dem Beispiel ist das dann A.

    Dienstag, 30. Januar 2018 10:27
  • Hi,

    dann ist meine obige Abfrage das, was Du suchst. Die gibt exakt dieses Ergebnis aus.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 30. Januar 2018 10:48
    Moderator
  • Hallo Stefan,

    das ORDER BY ArtNr bei der ROW_NUMBER() Window Function ist zu viel. Hier reicht das ORDER BY Typ DESC.

    Dafür würde ich ein ORDER BY ArtNr ans Ende des Statements setzen!

    Am Ergebnis ändert das freilich nichts! :-)


    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Dienstag, 30. Januar 2018 12:07
    Beantworter
  • Hallo Christoph,

    Recht hast Du. ArtNr ist ja wegen dem PARTITION BY im ORDER BY nicht notwendig bzw. briungt nix.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 30. Januar 2018 12:12
    Moderator