Announcement

Collapse
No announcement yet.

Ersten Eintrag einer geordneten Liste

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

  • Ersten Eintrag einer geordneten Liste

    Hallo Forum,

    ich habe folgende Beispieltabelle:

    Entry No | Artikel | Artikelgruppe | Kunde | Menge
    1 Fahrrad Zweirad 100 10
    2 Fahrrad Zweirad 100 12
    3 Fahrrad Zweirad 100 14
    4 Stuhl Möbel 100 16
    5 Stuhl Möbel 100 18
    6 Stuhl Möbel 100 20

    so, das erst einmal als Beispieldaten. Ich möchte jetzt immer den ersten Eintrag innerhalb der Gruppen haben. Also in diesem Beispiel möchte ich, dass mein SQL die beiden Datensätze

    1 Fahrrad Zweirad 100 10 (erster in der Gruppe Fahrrad, Zweirad und Kunde 100)
    4 Stuhl Möbel 100 16 (erster in der Gruppe Stuhl, Möbel und Kunde 100)

    zurückliefert. Geht so etwas mit einem SQL-Statement oder muss ich doch eher dazu übergehen und eine stored procedure programmieren? Sollte ich eine SP nutzen müssen, würde ich immer eine Zeile mit der vorhergehenden Vergleichen, um so zu prüfen ob eine Änderung vorliegt?
    Hat hier jemand eine Idee? Würde mich über Hilfe sehr freuen.

    Danke!!!!

  • #2
    Originally posted by slies View Post
    Hallo Forum,

    ich habe folgende Beispieltabelle:

    Entry No | Artikel | Artikelgruppe | Kunde | Menge
    1 Fahrrad Zweirad 100 10
    2 Fahrrad Zweirad 100 12
    3 Fahrrad Zweirad 100 14
    4 Stuhl Möbel 100 16
    5 Stuhl Möbel 100 18
    6 Stuhl Möbel 100 20

    so, das erst einmal als Beispieldaten. Ich möchte jetzt immer den ersten Eintrag innerhalb der Gruppen haben. Also in diesem Beispiel möchte ich, dass mein SQL die beiden Datensätze

    1 Fahrrad Zweirad 100 10 (erster in der Gruppe Fahrrad, Zweirad und Kunde 100)
    4 Stuhl Möbel 100 16 (erster in der Gruppe Stuhl, Möbel und Kunde 100)

    zurückliefert. Geht so etwas mit einem SQL-Statement oder muss ich doch eher dazu übergehen und eine stored procedure programmieren? Sollte ich eine SP nutzen müssen, würde ich immer eine Zeile mit der vorhergehenden Vergleichen, um so zu prüfen ob eine Änderung vorliegt?
    Hat hier jemand eine Idee? Würde mich über Hilfe sehr freuen.

    Danke!!!!
    [HIGHLIGHT="SQL"]/* wenn dein DBMS die ROW_Number() Funktion unterstützt... wie z.B MS-SQL-2005, DB2 oder Oracle */
    BEGIN TRAN;
    CREATE Table Test (EntryNo INT , Artikel VARCHAR(10), Gruppe Varchar(10), Kunde INT, Menge INT);
    INSERT INTO Test SELECT 1, 'Fahrrad','Zweirad', 100, 10
    UNION ALL SELECT 2, 'Fahrrad','Zweirad', 100, 12
    UNION ALL SELECT 3, 'Fahrrad','Zweirad', 100, 14
    UNION ALL SELECT 4, 'Stuhl','Möbel', 100, 16
    UNION ALL SELECT 5, 'Stuhl','Möbel', 100, 18
    UNION ALL SELECT 6, 'Stuhl','Möbel', 100, 20;
    SELECT T.*
    FROM Test AS T
    JOIN (SELECT EntryNo
    , ROW_NUMBER () OVER(PARTITION BY Artikel+gruppe ORDER BY Artikel, Gruppe, Kunde) AS RowNo
    FROM Test
    ) AS X ON X.EntryNo = T.EntryNo
    AND X.RowNo = 1
    ROLLBACK;[/HIGHLIGHT]
    [HIGHLIGHT="Result"]EntryNo Artikel Gruppe Kunde Menge
    ----------- ---------- ---------- ----------- -----------
    1 Fahrrad Zweirad 100 10
    4 Stuhl Möbel 100 16[/HIGHLIGHT]

    Comment


    • #3
      Danke ebis für die schnelle Antwort.

      Habe selber noch eine alternative Lösung gefunden.

      SELECT
      *
      FROM
      dbo.Tabelle T1
      JOIN
      (SELECT
      MIN([Entry No]) AS EntryNo
      FROM
      dbo.Tabelle
      GROUP BY
      Artikel, ArtikelGruppe, Kunde) T2 ON T1.[Entry No] = T2.EntryNo

      Funktioniert auch super.

      Comment


      • #4
        Originally posted by slies View Post
        Danke ebis für die schnelle Antwort.

        Habe selber noch eine alternative Lösung gefunden.
        SELECT
        *
        FROM
        dbo.Tabelle T1
        JOIN
        (SELECT
        MIN([Entry No]) AS EntryNo
        FROM
        dbo.Tabelle
        GROUP BY
        Artikel, ArtikelGruppe, Kunde) T2 ON T1.[Entry No] = T2.EntryNo
        selber?

        Comment


        • #5
          geb zu, nicht selber Aber eine smarte Lösung wie ich finde. Danke aber trotzdem

          Comment

          Working...
          X