-
SQL CREATE VIEW komplexes Problem
hi,
ich habe folgendes Problem mit einem SQL CREATE VIEW bzw. will ich wissen ob folgendes möglich ist:
Ich hab 3 physische Datein:
A
B
C
Tabelle A ist der Kundenstamm mit der Kundennummer die UNIQUE ist, d.h. ein Satz pro Kundennr.
Tabelle B und C sind Tabellen mit Telefonnummer(B) und Email-Adr.(C) zum Kunden, auch mit Kundennr.
Hat der Kunde als z.b. 2 Tel.nummern, dann gibt es in Tabelle B 2 Sätze !!!
Jetzt muss ich mit Create View im SQL eine Datei erzeugen, wo ich pro Kunde nur EINEN Satz erzeugen darf !
Kundennr. (tab A)
name (tab A)
Tel.nummer 1 (tab B)
Tel.nummer 2 (tab B)
Tel.nummer 3 (tab B)
Email 1 (tab C)
Email 2 (tab C)
Email 3 (tab C)
Ist das mit einem CREATE VIEW möglich ? Ich kann hier NUR mit einem create view arbeiten !!! Ich kann hier nichts reinprogrammieren mit irgendwas, die Gründe wären jetzt zu komplex zu erklären.
Könnt ihr mir helfen ?
lg, Martin
-
hi martin,
brauchst du den einen DS für eine ausgabe ins CSV?
denn dann könntest du - wie schon ein paar mal im forum beschrieben - eine zeichenkette in einer schleife zusammenstellen.
je nach dem wie extrem die lösung sein soll, könntest du auch folgendes machen:
dynamisches create table mit dynamische zusammensetzung der spalten. (spaltendefinitionen kriegst du aus der tabelle syscolumns)
dynamisches insert aus tabelle a, b und c in die neue.
aber wie gesagt ... das ist sicher NICHT die schöne lösung
lg andreas
-
Zitat von andreaspr@aon.at
hi martin,
brauchst du den einen DS für eine ausgabe ins CSV?
denn dann könntest du - wie schon ein paar mal im forum beschrieben - eine zeichenkette in einer schleife zusammenstellen.
je nach dem wie extrem die lösung sein soll, könntest du auch folgendes machen:
dynamisches create table mit dynamische zusammensetzung der spalten. (spaltendefinitionen kriegst du aus der tabelle syscolumns)
dynamisches insert aus tabelle a, b und c in die neue.
aber wie gesagt ... das ist sicher NICHT die schöne lösung
lg andreas
nein, das problem ist ein anderes.
System A ist ein SAP was auf einer AS/400 läuft. Tabelle A B und C ist dort abgelegt.
System B ist ein Warenwirtschaftsprogramm, welches auf einer anderen AS/400 läuft. Dieses muss ECHTZEIT auf diesen View zugreifen !
Im Moment greift dieser nur auf Tabelle A zu. Das war einfach. Jetzt kommen B und C dazu um auch Tel.nr. und Email-Adr. zu haben. Jetzt wirds kompliziert.
Im System B darf ich nur einen Record pro Kundennummer haben, das hat 'entwicklungstechnische' Gründe.
Also ein bisschen kompliziert das ganze
lg
-
also, was du gerne hättest wäre ein view, welches die spalten automatisch hinzufügt bzw. entfernt, je nachdem wieviele datensätze in tabelle b und c vorhanden sind?
bzw. je nachdem zb wieviele spalten für telefonnummern in b zur aktuellen abfrage benötigt werden?
also ich glaube ich lehne mich da nicht zuweit aus dem fenster, wenn ich sage sowas geht nicht.
wenn dein warenwirtschaftsprogramm auch über sql auf dieses view zugreift, woher weis dieses wieviele spalten gerade vorhanden sind, bzw. welche spalte telefon und welche mails sind?
lg andreas
-
Zitat von andreaspr@aon.at
also, was du gerne hättest wäre ein view, welches die spalten automatisch hinzufügt bzw. entfernt, je nachdem wieviele datensätze in tabelle b und c vorhanden sind?
bzw. je nachdem zb wieviele spalten für telefonnummern in b zur aktuellen abfrage benötigt werden?
also ich glaube ich lehne mich da nicht zuweit aus dem fenster, wenn ich sage sowas geht nicht.
wenn dein warenwirtschaftsprogramm auch über sql auf dieses view zugreift, woher weis dieses wieviele spalten gerade vorhanden sind, bzw. welche spalte telefon und welche mails sind?
lg andreas
nein nein nein, so is es nicht:
Pro Kunde soll es einen Satz geben mit Kundennr. und Name + 3 Felder Tel.nr + 3 Felder Email.
Es kann sein das der Kunde nur eine Tel.nr hat und keine Email. Dann hat der Satz die Tel.nr 1 befüllt, Telnr. 2 und 3 müssen initial bleiben (blank). Alle 3 Email-Felder müssen auch leer sein.
D.h. der Aufbau vom Satz ist immer gleich. ABer je nach Anzahl der Tel.nr und Email-Adr. stehen in diesen Felder Inhalte oder nicht.
-
Gehen tut fast alles, nur eine Frage der Schlüssel:
create view MyView as
with
TempTel as
(select KDNR, Min(Telefon) as Telefon
from TelDatei
group by Kdnr)
,
TempMail as
(Select Kdnr, Min(Mail) as Mail
from MailDatei
Group by Kdnr)
Select Kdnr, coalesce(Telefon, ' ') as Telefon, coalesce(Mail, ' ') as Mail
from Kunden a
left join TempTel t on a.kdnr=t.kdnr
left join TempMail m on a.kdnr=m.kdnr
Coalesce ist erforderlich um NULL, also kein Telefon und keine Mail auszuschließen.
-
Zitat von bettina_martin
nein nein nein, so is es nicht:
Pro Kunde soll es einen Satz geben mit Kundennr. und Name + 3 Felder Tel.nr + 3 Felder Email.
Es kann sein das der Kunde nur eine Tel.nr hat und keine Email. Dann hat der Satz die Tel.nr 1 befüllt, Telnr. 2 und 3 müssen initial bleiben (blank). Alle 3 Email-Felder müssen auch leer sein.
D.h. der Aufbau vom Satz ist immer gleich. ABer je nach Anzahl der Tel.nr und Email-Adr. stehen in diesen Felder Inhalte oder nicht.
asooo, da bin ich wohl vom schlimmsten ausgegangen ... dann ists einfacher
-
Vielleicht so? (Angaben ohne Gewähr!)
PHP-Code:
CREATE VIEW V AS (
SELECT NR, NAME, VALUE(TEL1, '') AS TEL1, VALUE(TEL2, '') AS TEL2, VALUE(TEL3, '') AS TEL3, VALUE(EMAIL1,'') AS EMAIL1, VALUE(EMAIL2,'') AS EMAIL2, VALUE(EMAIL3,'') AS EMAIL3 FROM (
SELECT A.NR, A.NAME,
(SELECT MIN(TEL) FROM B WHERE B.NR=A.NR) AS TEL1, (SELECT MIN(TEL) FROM B WHERE B.NR=A.NR AND TEL>(SELECT MIN(TEL) FROM B WHERE B.NR=A.NR)) AS TEL2, (SELECT MIN(TEL) FROM B WHERE B.NR=A.NR AND TEL>(SELECT MIN(TEL) FROM B WHERE B.NR=A.NR AND TEL>(SELECT MIN(TEL) FROM B WHERE B.NR=A.NR))) AS TEL3,
(SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR) AS EMAIL1, (SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR AND EMAIL>(SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR)) AS EMAIL2, (SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR AND EMAIL>(SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR AND EMAIL>(SELECT MIN(EMAIL) FROM C WHERE C.NR=A.NR))) AS EMAIL3
FROM A) AS X)
-
Similar Threads
-
By Franz Karl in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 20-01-07, 08:04
-
By antvik in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 02-08-06, 18:04
-
By Stefan_Sk in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 26-05-06, 16:37
-
By Lucky4712 in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-05-06, 15:57
-
By Kaufmann in forum IBM i Hauptforum
Antworten: 17
Letzter Beitrag: 11-05-06, 14:57
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