-
Erstellen einer View
Hallo Kollegen,
ich habe da ein Problem, vielleicht kann mir einer helfen. Ich möchte eine View aus 2 Tabellen erstellen soweit so gut.
Die View soll nur die Artikelnr, Filiale und die Summe(Menge) aus allen beiden Tabellen enthalten.
Leider habe ich in der Tabelle2 einige Datensätze dies es nicht in der Tabelle1 gibt, die dann aber trotzdem in der View enthalten sein sollen.
Auch wenn ich die beiden Tabellen verknüpfe, wird die Summe der Menge gleichen Artikelnr mehrfach summiert.
Wir haben V7R1 im Einsatz
Vielen Dank im Voraus
Jenne
Tabelle1 |
|
|
Artikelnr |
Filiale |
Menge |
100 |
1 |
10 |
100 |
2 |
10 |
100 |
1 |
20 |
200 |
1 |
30 |
300 |
2 |
5 |
Tabelle2 |
|
|
Artikelnr |
Filiale |
Menge |
100 |
1 |
10 |
100 |
1 |
10 |
200 |
2 |
20 |
400 |
3 |
30 |
500 |
1 |
5 |
-
Du meinst, Du willst beide Tabellen zusammenmischen?
Das SQL Statement müsste etwa so lauten
Code:
Create View Schema/View
as (Select ArtikelNr, Filiale, Sum(Menge) Menge
from ( Select ArtikelNr, Filiale, Menge
From Tabelle1
Union All
Select ArtikelNr, Filiale, Menge
From Tabelle2) x
Group By ArtikelNr, Filiale)
-
Hallo B.Hauser,
irgendwo habe ich einen Fehler denn ich aber nicht finde. Ich sende einmal mein Originalstatement:
PHP-Code:
CREATE VIEW art_reserv (MANDANT_NR, FILIAL_NR, ZENTRAL_NR, MENGE) AS (SELECT AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR , SUM( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE + auf_msv3.liefermenge ) from (select AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR , AUF_POS_ZW.BESTELLMENGE , AUF_POS_ZW.FEHLMENGE from auf_defa, AUF_POS_ZW,AUF_KO_ZW WHERE AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ = ' ' AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR AND ( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0 AND AUF_POS_ZW.SATZ_KEZ <> 'T' union all Select auf_msv3.mandant_nr. auf_msv3.filial_nr, Auf_msv3.zentral_nr, auf_msv3.liefermenge from auf_msv3) x GROUP BY AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR)
Gruß
Jenne
-
Nach SELECT auf_msv3.mandant darf kein Punkt, sondern muss ein Komma folgen.
Warum muss alles in einer View sein?
Erstelle für die Verknüpfung jeweils eigene Views und packe diese schließlich in eine gemeinsame View.
Views können innerhalb von Views wie Tabellen oder physische Dateien verwendet werden.
Birgitta
-
Danke B. Hauser Du hast natürlich recht.
Jetzt kommt aber "Spaltenanzahl unterschiedlich. Das verstehe ich ja noch.
Weil ich AUF_POS_ZW.BESTELLMENGE , AUF_POS_ZW.FEHLMENGE eingegeben habe.
Wenn ich aber dafür
sum(AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE)
eingebe, dann kommt:
"Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."
Gruß
Jenne
-
Du hast den Sub-Select mit der Union-Anweisung auch x genannt.
Wenn Du Deine Spalten im endgültigen SELECT qualifizieren willst, musst Du auch x. verwenden und nicht irgendwas anderes. Um sicher zustellen, dass die Spalten den gleichen Namen haben solltest Du die Namen festlegen. Entweder nach x, z.B. x (Filiale, ArtikelNr, Menge)
Im endgültigen SELECT-Statement muss dann x.Filiale (oder einfach nur Filiale) etc. verwendet werden.
Birgitta
-
Hallo Britta,
im Endgültigen Select kommt aber nicht die Feherlmeldung:
"Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."
sondern im Subselect :
PHP-Code:
CREATE VIEW art_reserv (MANDANT_NR, FILIAL_NR, ZENTRAL_NR, MENGE) AS (SELECT AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR , SUM( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE + auf_msv3.liefermenge ) from (select AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR ,sum( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE) from auf_defa, AUF_POS_ZW,AUF_KO_ZW WHERE AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ = ' ' AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR AND ( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0 AND union all Select auf_msv3.mandant_nr, auf_msv3.filial_nr, Auf_msv3.zentral_nr, auf_msv3.liefermenge from auf_msv3) x (MANDANT, FILIALE, PZN, MENGE) GROUP BY auf_defa.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR)
Ich weiß nicht wo der Fehler sitzt!!!!
Könntest Du mir das einmal farblich markieren?
Gruß
Jenne
-
Zitat von Jenne
Hallo Britta,
im Endgültigen Select kommt aber nicht die Feherlmeldung:
"Spalte MANDANT_NR oder Ausdruck in SELECT-Liste nicht gültig."
sondern im Subselect :
PHP-Code:
CREATE VIEW art_reserv (MANDANT_NR, FILIAL_NR, ZENTRAL_NR, MENGE) AS (SELECT AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR , SUM( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE + auf_msv3.liefermenge ) from (select AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR ,sum( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE) from auf_defa, AUF_POS_ZW,AUF_KO_ZW WHERE AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ = ' ' AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR AND ( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0 AND union all Select auf_msv3.mandant_nr, auf_msv3.filial_nr, Auf_msv3.zentral_nr, auf_msv3.liefermenge from auf_msv3) x (MANDANT, FILIALE, PZN, MENGE) GROUP BY auf_defa.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR)
Ich weiß nicht wo der Fehler sitzt!!!!
Könntest Du mir das einmal farblich markieren?
Gruß
Jenne
Das AND vor UNION ist zuviel.
Mit Union leitest du einen neuen Select ein.
-
Zitat von Fuerchau
Das AND vor UNION ist zuviel.
Mit Union leitest du einen neuen Select ein.
Sorry hatte die folgende Zeile nicht mit kopiert:
"AUF_POS_ZW.SATZ_KEZ <> 'T'"
jetzt ergibt auch das "and" einen Sinn.
Kannst Du jetzt bitte noch einmal schauen?
Gruß
Jenne
-
Bei der Umformatierung wird es deutlicher:
CREATE VIEW art_reserv
(
MANDANT_NR,
FILIAL_NR,
ZENTRAL_NR,
MENGE)
AS (
SELECT
AUF_DEFA.MANDANT_NR,
AUF_POS_ZW.FILIAL_NR,
AUF_POS_ZW.ZENTRAL_NR ,
SUM( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE + auf_msv3.liefermenge )
from (
select
AUF_DEFA.MANDANT_NR,
AUF_POS_ZW.FILIAL_NR,
AUF_POS_ZW.ZENTRAL_NR ,
-- Hier befindest du dich auf Einzelsatzebene daher ist "sum" zuviel!!!
sum( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE)
from auf_defa, AUF_POS_ZW, AUF_KO_ZW
WHERE
AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR
AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR
AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR
AND AUF_DEFA.STATUS_KEZ = ' '
AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR
AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR
AND (AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0
AND AUF_POS_ZW.SATZ_KEZ <> 'T'
union all
Select
auf_msv3.mandant_nr,
auf_msv3.filial_nr,
Auf_msv3.zentral_nr,
auf_msv3.liefermenge
from auf_msv3
)
x (MANDANT, FILIALE, PZN, MENGE)
GROUP BY
auf_defa.MANDANT_NR,
AUF_POS_ZW.FILIAL_NR,
AUF_POS_ZW.ZENTRAL_NR
)
-
Hallo Britta, hallo Fürchau,
klasse....! Dank Euch beiden hat es jetzt geklappt.
PHP-Code:
CREATE VIEW art_reserv ( MANDANT_NR, FILIAL_NR, ZENTRAL_NR, MENGE) AS ( SELECT x.mandant, x.filiale, x.pzn , SUM( x.menge) from ( select AUF_DEFA.MANDANT_NR, AUF_POS_ZW.FILIAL_NR, AUF_POS_ZW.ZENTRAL_NR , ( AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE) from auf_defa, AUF_POS_ZW, AUF_KO_ZW WHERE AUF_DEFA.MANDANT_NR = AUF_KO_ZW.MANDANT_NR AND AUF_DEFA.FILIAL_NR = AUF_KO_ZW.FILIAL_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_KO_ZW.ARS_AUFTRAG_NR AND AUF_DEFA.STATUS_KEZ = ' ' AND AUF_DEFA.MANDANT_NR = AUF_POS_ZW.MANDANT_NR AND AUF_DEFA.ARS_AUFTRAG_NR = AUF_POS_ZW.ARS_AUFTRAG_NR AND (AUF_POS_ZW.BESTELLMENGE - AUF_POS_ZW.FEHLMENGE ) <> 0 AND AUF_POS_ZW.SATZ_KEZ <> 'T' union all Select auf_msv3.mandant_nr, auf_msv3.filial_nr, Auf_msv3.zentral_nr, auf_msv3.liefermenge from auf_msv3 where auf_msv3.liefermenge <> 0 and AUF_MSV3.ERLEDIGT _KEZ = ' ') x (MANDANT, FILIALE, PZN, MENGE) GROUP BY x.mandant, x.filiale, x.pzn )
Gruß
Jenne
-
Wer ist Britta?
Similar Threads
-
By systemer in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 19-02-03, 08:33
-
By Sascha Storzum in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 06-01-03, 14:04
-
By chris in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 17-10-02, 13:32
-
By Burgy Zapp in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 06-03-02, 14:38
-
By KB in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 18-05-01, 15:04
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks