Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Abfrage aus 2 Viewszusammenführen (https://www.delphipraxis.net/70710-sql-abfrage-aus-2-viewszusammenfuehren.html)

renekr 3. Jun 2006 09:57

Datenbank: SQL Server 2005 • Version: 2005 STD • Zugriff über: ADO

SQL Abfrage aus 2 Viewszusammenführen
 
Hallo,
Ich tu mir gerade ein bisschen schwer bei einer Abfrage.

Ich habe 2 Views aus 2 Haupttabellen die natürlich mit Left outer join aus ansderten Tabellen daten holen.

In beiden Views sind ahnliche Spalten drin und nun möchte ich eine Abfrage machen über beide Views.

Also die 1. view ist eine Lagerbewegung wo Kosten pro Paltz drin stehen.
Die 2 View ist eine Aktionsdaten wo Minuten pro Platz als Störungen drin sind.

Über die Minuten errechne ich dann die Personal Zeit für diesen eintrag.

Und nun will ich eine Auswertung im Programm implementieren wo mir beide Kosten zurückgeben ( Lager und Personal ) von einem Zeitraum.


Danke

mirko2000 3. Jun 2006 10:09

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Versuchs mal mit der UNION-Abfrage:

SQL-Code:
SELECT spalte1, spalte2 FROM view1 UNION SELECT spalte1, spalte2 FROM view2;
Damit erhältst du eine Ergebnisliste mit beiden Abfragen.

renekr 3. Jun 2006 10:21

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Hi,
nein weil ich da nur die selben bekomme wie bei Distinct.
Ich will aber beide Daten ,wenn auch einige Spalten gleich sind.

*HMMM* oder ich mache unterschiedliche Spalten in beiden Views.

mal schaun.

Jelly 3. Jun 2006 11:58

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Wie wärs hiermit

SQL-Code:
select v1.platz, sum(v1.kosten) as Kosten, sum(v2.Minuten) as Minuten
from kostenview v1 left join minutenview v2 on v1.platz=v2.platz
group by v1.platz

renekr 3. Jun 2006 12:02

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Hi,
ne da bekomme ich nur die Gleichen Ergebnisse alle von Links raus.

Hier mal meine 2 Views.:

SQL-Code:
SELECT    TOP (100) PERCENT dbo.Lagerbewegung.Technischer_platz, dbo.Lagerbewegung.Platznummer, dbo.Prozess.Besch_Proz,
                      dbo.Prozess.Prozess_kuerz, dbo.Lagerbewegung.aktuelles_Datum, dbo.Lagerbewegung.Stueckzahl, dbo.Lagerliste.Preis,
                      ROUND(dbo.Lagerliste.Preis * dbo.Lagerbewegung.Stueckzahl, 0) AS P_ST, dbo.Lagerbewegung.Materialkennummer,
                      dbo.Lagerbewegung.Bewegungsnummer, dbo.Tech_PL_Kst.aktiv
FROM        dbo.Prozess LEFT OUTER JOIN
                      dbo.Tech_PL_Proz ON dbo.Prozess.Prozess_kuerz = dbo.Tech_PL_Proz.Prozess_kuerz RIGHT OUTER JOIN
                      dbo.Lagerbewegung INNER JOIN
                      dbo.Tech_PL_Kst ON dbo.Lagerbewegung.Technischer_platz = dbo.Tech_PL_Kst.Technischer_Platz ON
                      dbo.Tech_PL_Proz.Technischer_Platz = dbo.Lagerbewegung.Technischer_platz AND
                      dbo.Tech_PL_Proz.Platznummer = dbo.Lagerbewegung.Platznummer LEFT OUTER JOIN
                      dbo.Lagerliste ON dbo.Lagerbewegung.Materialkennummer = dbo.Lagerliste.Kennummer
WHERE    (dbo.Lagerbewegung.Bewegung = N'Abgang') AND (dbo.Lagerbewegung.Stueckzahl > 0) AND (dbo.Lagerliste.Preis > 0) AND (dbo.Tech_PL_Kst.aktiv = 1)
ORDER BY dbo.Lagerbewegung.Technischer_platz
Ergebniss:
01-BDTASSYTEST-2 6 Prozesseingabe PROZ 12.07.2002 07:39:00 16 0,66 11 252 617 True
01-BDTASSYTEST-2 6 Prozesseingabe PROZ 12.07.2002 07:56:00 16 0,94 15 250 618 True
01-BDTASSYTEST-2 6 Prozesseingabe PROZ 12.07.2002 08:36:00 15 0,94 14 250 619 True
01-BDTASSYTEST-2 7 Verschrauben manuell VS_M 12.07.2002 08:36:00 16 0,87 14 256 620 True

SQL-Code:
SELECT    TOP (100) PERCENT dbo.Aktionsdaten.Kennummer, dbo.Aktionsdaten.Stoer_Zeit, dbo.Aktionsdaten.Technischer_Platz, dbo.Aktionsdaten.Platznummer,
                      dbo.Aktionsdaten.Prozess, dbo.Aktionsdaten.PM_min, dbo.Prozess.Besch_Proz, dbo.Aktionsdaten.PM_min * 1.33 AS PM_Kosten,
                      dbo.Tech_PL_Kst.aktiv
FROM        dbo.Aktionsdaten LEFT OUTER JOIN
                      dbo.Tech_PL_Kst ON dbo.Aktionsdaten.Technischer_Platz = dbo.Tech_PL_Kst.Technischer_Platz LEFT OUTER JOIN
                      dbo.Prozess ON dbo.Aktionsdaten.Prozess = dbo.Prozess.Prozess_kuerz
WHERE    (dbo.Tech_PL_Kst.aktiv = 1)
ORDER BY dbo.Aktionsdaten.Technischer_Platz
Ergebniss:
686 05.06.2001 15:00:00 01-BDTASSYTEST-2 5 VS_M 5 Verschrauben manuell 6,65 True
1376 16.10.2001 07:40:00 01-BDTASSYTEST-2 4 VS_M 5 Verschrauben manuell 6,65 True
1503 16.11.2001 07:25:00 01-BDTASSYTEST-2 8 PROZ 10 Prozesseingabe 13,30 True
5113 16.01.2003 00:00:00 01-BDTASSYTEST-2 1 10 NULL 13,30 True


Die Ergebnisse sind nur 3-4 Stück.

Die 1. View hat 10712 Datensätze.
Die 2. knapp 39000

Ich will eine View oder Select abfrage über beide Views machen damit ich alle Ergebnisse mit Kosten ( einmal Lager und Personall ) rausbekomme aber in einem Zeitraum.
Einmal heißt der Zeitraum Stoer_Zeit einmal Aktuelles_Datum.
Also müßte ich eine View mache über beide mit Where stoer_zeit between and Aktuelles_Datum between.

Aber ich weiß nicht wie ich beide View Ergebnisse zusammenführen kann und Datensätze zu verlieren wie bei Left outer oder Distinct ,union.

Danke

gmc616 13. Jun 2006 15:38

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Wie wäre es mit
SQL-Code:
SELECT
   'aus View1' as label,
   <alles weitere>
FROM
   view1 
UNION SELECT
   'aus View2' as label,
   <alles weiter>
FROM
   View2;
Somit hast du immer unterschiedliche Datensätze und beide Tabellen in einer Abfrage.

omata 13. Jun 2006 19:12

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Hallo renekr,

versuch mal folgendes...

SQL-Code:
  SELECT spalte1, spalte2 FROM view1 UNION ALL SELECT spalte1, spalte2 FROM view2;
MfG
Thorsten

renekr 14. Jun 2006 07:00

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Hi,
also danke erstmal,aber das Problem bei union all ist oder generell bei union ,das beide Select identisch sein müssen.
Von der Bezeichnung und vom Datentyp.

Und wie man bei mir sieht ist die bezeichnung mal anderst.

Ich könnte nur über eine Zwischenview dieSpalten der beiden Views getrennt anpassen,aber das will i nicht unbedingt.

PS: Die 1. Select xy as spalte1 funktioniert allerdings nur mit dem union all operator.sonst bekomme ich nicht alle daten raus.
Muss nur etwas umdenken .

Vielen Dank.
danke

gmc616 14. Jun 2006 10:29

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Zitat:

Zitat von renekr
...aber das Problem bei union all ist oder generell bei union ,das beide Select identisch sein müssen.
Von der Bezeichnung und vom Datentyp.

Also das ist mir neu. Vom Datentyp her ja, aber auch die Bezeichnungen ... :gruebel:

Gut, ich habe nie mit SQL-Server bzw. ADO gearbeitet, aber z.B. Oracle oder MySQL sind die Bezeichnungen egal. Hauptsache der Datentyp stimmt. Vieleicht handhabt das MS wiedermal anders ... :angel2:

Aber wenn das so ist, brauchst du ja nur deine View-Definitionen anpassen, damit die Bezeichnungen überein stimmen.
Oder zu labelst alle Spalten durch. Vlt. funktioniert das.
UNION SELECT ist mMn def. der richtige Weg.

omata 14. Jun 2006 17:20

Re: SQL Abfrage aus 2 Viewszusammenführen
 
Zitat:

Zitat von renekr
Gut, ich habe nie mit SQL-Server bzw. ADO gearbeitet, aber z.B. Oracle oder MySQL sind die Bezeichnungen egal. Hauptsache der Datentyp stimmt. Vieleicht handhabt das MS wiedermal anders ... :angel2:

Das ist bei MSSQL genauso...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Seite 1 von 2  1 2      

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