[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2006
    Beiträge
    85

    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

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    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

  3. #3
    Registriert seit
    Apr 2006
    Beiträge
    85
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    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

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    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

  5. #5
    Registriert seit
    Apr 2006
    Beiträge
    85
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    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.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von bettina_martin Beitrag anzeigen
    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

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Vielleicht so? (Angaben ohne Gewähr!)
    PHP-Code:
    CREATE VIEW V AS (                                           

    SELECT NRNAMEVALUE(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.NRA.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(EMAILFROM C WHERE C.NR=A.NR)   AS EMAIL1,
          (
    SELECT MIN(EMAILFROM C WHERE C.NR=A.NR    AND       
    EMAIL>(SELECT MIN(EMAILFROM C WHERE C.NR=A.NR))  AS EMAIL2,
          (
    SELECT MIN(EMAILFROM C WHERE C.NR=A.NR    AND      
    EMAIL>(SELECT MIN(EMAILFROM C WHERE C.NR=A.NR    AND      
    EMAIL>(SELECT MIN(EMAILFROM C WHERE C.NR=A.NR))) AS EMAIL3

                                               FROM A
    ) AS X

  9. #9
    Registriert seit
    Nov 2003
    Beiträge
    2.307

Similar Threads

  1. CREATE VIEW
    By Franz Karl in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 20-01-07, 08:04
  2. create view oder constraint oder trigger oder ... ?
    By antvik in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 02-08-06, 18:04
  3. problem mit eigener sql function
    By Stefan_Sk in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 26-05-06, 16:37
  4. SQL Problem
    By Lucky4712 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-05-06, 15:57
  5. SQL -> CREATE VIEW
    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
  •