[NEWSboard IBMi Forum]

Thema: SQL in where

  1. #1
    Registriert seit
    Jan 2001
    Beiträge
    833

    SQL in where

    Hi ,

    irgendwie verstehe ich gerade etwas nicht.

    Folgendes SQL :
    PHP-Code:
    select *
            
    from VISITOR01V  as a
            where
            1 
    = case when :pKUNDENR <> and
                          
    KUNDENR = :pKUNDENR then 1
                 
                     when 
                        
    :pKUNDENR 0  and
                        
    KundeVertreter = :pKundeVertreter   and
                        
    Kundestatus 'A'    
                        
    and exists select plzvon
                                       from tmpPlzTable
                                        where a
    .kundenplz between plzvon and plzbis)  then 1
                                                 

                   
    else 0
                end 
    sagt das Token EXISTS ungültig ist

    Das SQL ohne den Case Block
    PHP-Code:
    select *                                                                
        
    from VISITOR01V  as a                                                 
        where  KundeVertreter 
    = :pKundeVertreter                              
        
    and    KundeStatus    = :pKundeStatus                                 
        
    and    exists select plzvon                                         
                              from tmpPlzTable                                
                              where a
    .kundenplz between plzvon and plzbis) ; 
    funktioniert.

    Ich brauche die Kunden entweder für eine Kundennr,
    oder eben alle die in versch. PLZ Bereichen sind.
    Die Plz Bereiche von - bis stehen in der tmpPlzTable

    Hat jemand eine Idee ?
    Gruß
    Michael

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Leider ist exists nur in einer Where-Klausel und nicht in jedem beliebigen Ausdruck erlaubt.
    Daher wird das dann etwas komplizierter mit einem erlaubten skalaren Subselect:

    and coalesce(
    (select a.kundenplz
    from tmpPlzTable
    where a.kundenplz between plzvon and plzbis
    fetch first rows only), '') = a.kundenplz
    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

  3. #3
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hi,

    ich habe aber in der tmpPlzTable Tabelle 1-n Sätze für die PLZ. Bereiche
    also z.b von 42000-45000
    und von 47000-48000
    ............

    Das bekommeich doch so nicht oder ?
    Gruß
    Michael

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wieso nicht: where a.kundenplz between plzvon and plzbis
    Da reicht doch irgendeiner der passt.
    Wenn der Subselect nichts findet, dann liefert der NULL, was der Coalesce zu Blank verarztet.
    Ist ein gültiger Bereich da, bekommst du deine eigene PLZ zurück, wobei hier ja das 1. Vorkommen reicht, wie bei exists ja auch.
    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

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hi Baldur,

    danke . So klappt es .

    Gruß
    Michael

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •