Announcement

Collapse
No announcement yet.

Auswertung SQL Tabelle

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

  • Auswertung SQL Tabelle

    Hallo zusammen

    Ich bin neu hier und hoffe mache nicht gleich zum Anfang alles falsch.

    Also mein Problem ist folgendes, erklärt an einem Beispiel:


    Die Tabelle sieht so aus:

    Name Anzahl Tiere Art der Tiere
    Peter 2 Geissen
    " 1 Schafe

    Hans 0 Geissen
    " 3 Schafe

    Nun möchte ich gerne wissen wer NULL Tiere hat.


    Dazu benutze ich folgendes



    select sum(ANIMAL_COUNT) as berg
    from bgkaddrmain a,bgkdefbetrieb b, BGKETRCONT c
    where a.short_name = b.bgk_betrieb_id
    and bgk_member_status = 'J'
    and c.BGK_BETRIEB_ID = a.short_name
    and berg = 0
    grioup by a.short_name, a.Name, a.Vorname,
    a.place_name,a.abo_nr
    order by name, vorname




    Da ich in der IBConsole bin kann ich den Begriff TOP nicht benutzen. Irgendwie mag er das "and berg = 0" nicht....

    Wäre super wen mir da wer nen tipp geben könnte.

    Grüsse

    Frey Frédéric

  • #2
    Originally posted by Schoggifrey View Post
    ... Irgendwie mag er das "and berg = 0" nicht....

    Wäre super wen mir da wer nen tipp geben könnte.
    Hallo,

    wenn du das berg = 0 durch HAVING sum(ANIMAL_COUNT) = 0 ersetzt und dieses ganz ans Ende platzierst, dann sollte es funktionieren.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,

      wenn die Tabelle normalisiert wird ist die Abfrage auf NULL (Tiere) einfacher.

      Normalisierungsregeln:
      1. Jeder Attibutwert muss atomar (elementar) sein.
      2. Alle Spalten, die nicht zum eindeutigen Schlüssel einer Tabelle gehören, müssen von dem gesamten Schlüssel abhängig sein.
      3. Alle Spalten einer Tabelle müssen vom Primärschlüssel der Tabelle und nicht bereits von anderen Spalten abhängig sein.

      Daraus folgt dass eine m:n-Beziehung (wie in deinem Problem) in 3 Tabellen aufgelöst werden muss.

      Angewandt auf dein Problem sieht der Datenbankentwurf dann wie in der angehängten Grafik aus.

      Somit kann eine Abfrage auf NULL-Tiere getätigt werden:
      [highlight=sql]
      -- Abfrage der Halter mit NULL Tieren:
      SELECT h.Halter AS Name
      FROM tblTierHalter AS th
      INNER JOIN tblHalter AS h ON h.ID = th.Halter
      WHERE th.Anzahl IS NULL
      [/highlight]

      Hoffe es hilft dir.
      mfG Gü

      Der komplette Code:
      [highlight=sql]
      -- Tabellen (normalisiert):
      CREATE TABLE tblHalter
      (
      ID int IDENTITY CONSTRAINT pkHalter PRIMARY KEY,
      Halter nvarchar(20)
      )

      CREATE TABLE tblTiere
      (
      ID int IDENTITY CONSTRAINT pkTiere PRIMARY KEY,
      Tier nvarchar(20)
      )

      CREATE TABLE tblTierHalter
      (
      Halter int CONSTRAINT fkHalter FOREIGN KEY REFERENCES tblHalter(ID),
      Anzahl int,
      Tier int CONSTRAINT fkTiere FOREIGN KEY REFERENCES tblTiere(ID),
      CONSTRAINT pkTierHalter PRIMARY KEY (Halter, Tier)
      )
      GO

      -- Namen befüllen:
      INSERT INTO tblHalter
      VALUES ('Peter');

      INSERT INTO tblHalter
      VALUES ('Hans');

      -- Tierarten befüllen:
      INSERT INTO tblTiere
      VALUES ('Geissen');

      INSERT INTO tblTiere
      VALUES ('Schafe');

      -- Tierhalter befüllen:
      INSERT INTO tblTierHalter
      VALUES (1, 2, 1);

      INSERT INTO tblTierHalter
      VALUES (1, 1, 2);

      INSERT INTO tblTierHalter
      VALUES (2, NULL, 1);

      INSERT INTO tblTierHalter
      VALUES (2, 3, 2);
      GO

      ---- Kontrollausgabe:
      SELECT h.Halter AS Name, th.Anzahl AS Anzahl, t.Tier AS Tier
      FROM tblTierHalter AS th
      INNER JOIN tblHalter AS h ON h.Id = th.Halter
      INNER JOIN tblTiere AS t ON t.ID = th.Tier

      -- Abfrage der Halter mit NULL Tieren:
      SELECT h.Halter AS Name
      FROM tblTierHalter AS th
      INNER JOIN tblHalter AS h ON h.ID = th.Halter
      WHERE th.Anzahl IS NULL
      [/highlight]
      Attached Files
      Zuletzt editiert von gfoidl; 27.06.2008, 12:02. Reason: Formatierung geändert
      "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

      Comment

      Working...
      X