Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Kleines Logikproblem (https://www.delphipraxis.net/149345-kleines-logikproblem.html)

Sanguis 19. Mär 2010 01:54

Datenbank: SQLite • Version: 3 • Zugriff über: ASQLite Komponenten

Kleines Logikproblem
 
Hallo,

ich schon wieder - sorry. Ich bekomme langsam Kopfschmerzen, von einem kleinen Logikproblem.
Ich habe eine Person, die hat einen Over Wert in verschiedenen Gebieten. Die Gebiete sind noch Kontinenten zugeordnet. Also 3 Tabellen. 1ne für die Gebiete, eine für die Kontinente und eine mit dem Wert der Overness, der workerID und der GebietID.
Nun wollte ich, die Gesammt Overness der Kontinente eines Workers auflisten. Die WorkerID ist gegeben. Darüber komme ich auch an die Gebiete und damit den Kontinent. Aber auflisten wollte ich es in T-Form. Ich habe mit 2 Shapes ein T gemacht und rechts und links je eine ListBox. Ich kann diese füllen, indem ich pro Gebiet den Kontinent rausfinde und die Overness. Allerdings sieht mein T dann so aus:

=========||==========
Amerika || 100
Amerika || 80
Amerika || 100
Europa || 100
||

Mein Problem: Ich möchte nur 1 mal einen Kontinent auflisten und die Overness addieren. Also 1 mal Amerika mit 280.

Puh, kompliziert. Ich hoffe, jemand hat es verstanden und kann mir helfen.

Gruß,
Andreas

Torpedo 19. Mär 2010 01:58

Re: Kleines Logikproblem
 
Das müsste mit sum() und GROUP BY ( http://sql.1keydata.com/de/sql-group-by.php ) machbar sein.

s-off 19. Mär 2010 07:03

Re: Kleines Logikproblem
 
Zitat:

Ich hoffe, jemand hat es verstanden und kann mir helfen.
Also ich nicht... :gruebel:

Zitat:

Over Wert
Wert der Overness
Gesammt Overness der Kontinente eines Workers
:?:

angos 19. Mär 2010 10:32

Re: Kleines Logikproblem
 
Zitat:

Zitat von s-off
Zitat:

Ich hoffe, jemand hat es verstanden und kann mir helfen.
Also ich nicht... :gruebel:

Zitat:

Over Wert
Wert der Overness
Gesammt Overness der Kontinente eines Workers
:?:


Das kann man so unterschreiben. Ich habe keine Ahnung was du überhaupt machen willst, Sangius.

Sanguis 19. Mär 2010 14:07

Re: Kleines Logikproblem
 
Ist schwer zu beschreiben *g*
Ich arbeite mich mal weiter in SQL ein. Ich sollte die Joins lernen *g*

rollstuhlfahrer 19. Mär 2010 14:16

Re: Kleines Logikproblem
 
dann mal mal die Struktur der Tabellen der Datenbank auf und mach Pfeile, welche Einträge wie verknüpft sind. Daraus kann man dann die Joins machen. Mit solch einer Struktur wird es wesentlich einfacher.

Wenn du das selbst machen willst, schau dir mal Access an und erstelle neben den Tabellen eine Abfrage wie du deine Daten haben willst. Dann kannst du in die SQL-Ansicht umschalten und hast deinen SQL-Befehl.

Bernhard

p80286 19. Mär 2010 17:54

Re: Kleines Logikproblem
 
Hallo Sanguis
wenn ich Dich richtig verstanden habe, dann ist das vollkommen richtig was Du bekommst
[delphi]
Tab1:
Worker1;ID=1
Worker2;ID=2

Tab2
Amerika;ID=1
Afrika;ID=2

Tab3
30;T2ID=2;T1ID=1
40;T2ID=2;T1ID=2
77;T2ID=2;T1ID=1


Wenn Deine Daten ungefähr so aussehen, dann sind die Ergebnisse der Query auch korrekt:

Worker1 Afrika 30
Worker1 Afrika 77
...

wahrscheinlich mußt Du deine Daten über mehrere Queries (eine für jeden Worker) (oder eine mit Parametern!) erfragen.
Z.B.:
SQL-Code:
select Tab1.*, Tab2.*, Tab3.* 
from Tab1, Tab2, Tab3 
where Tab1.ID = Tab3.T1ID
  and Tab2.ID = Tab3.T2ID
  and Tab2.Kontinent ='Afrika'
oder
  and Tab1.Worker = 'Worker1'
ich hoffe das hilft Dir
Gruß
K-H

alzaimar 19. Mär 2010 18:05

Re: Kleines Logikproblem
 
Bitte nicht diese Schreibweise angewöhnen, das gibt nur Probleme. Lieber mit JOIN arbeiten:
SQL-Code:
select *
from Tab1 join
     Tab2 on Tab1.ID = Tab3.T1ID join
     Tab3 on Tab2.ID = Tab3.T2ID
where Tab2.Kontinent ='Afrika'
-- bzw. Tab1.Worker = 'Worker1'

Sanguis 19. Mär 2010 22:04

Re: Kleines Logikproblem
 
Hallo,

ich danke Euch.
Ich hab das Problem mit mehreren Querys gelöst. Aber ich versuche mich grad an Euren Lösungen, ist schlanker :)

Gruß,
Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz