none
IIF von Access in CASE WHEN umwandeln RRS feed

  • Frage

  • Hallo zusammen,


    in Access gibt es folgende Abfrage:

    SELECT [_M416].MeWi, [_M416].MeMe, [_M416].MeHs, 
    
    IIf([_M416].[PnPn]<>0,[_M416].[PnPn],IIf([_M316].[PnPn]<>0,[_M316].[PnPn],[_M216].[PnPn])) AS PnNo
    
    
    FROM (_M416 INNER JOIN _M316 ON ([_M416].MeHs = [_M316].HsHs) AND ([_M416].MeWi = [_M316].HsWi)) INNER JOIN _M216 ON [_M416].MeWi = [_M216].WiWi
    
    
    ORDER BY [_M416].MeWi, [_M416].MeMe, [_M416].MeHs;

    Diese Abfrage versuche ich im SQL Server Management Studio mittels CASE und WHEN und ELSE zu ersetzen. Leider bekomme ich nicht mehr als ein WHEN THEN hin.

    SELECT     dbo.Vw_M416.MeWi, dbo.Vw_M416.MeMe, 
                Vw_M416.MePn,
                Vw_M316.HsPn,
                Vw_M216.WiPn,
    CASE 
            WHEN Vw_M416.MePn <> 0
            THEN Vw_M416.MePn
            ELSE Vw_M316.HsPn
    END
    AS KKBNo
    FROM         dbo.Vw_M416 INNER JOIN
                          dbo.Vw_M316 ON dbo.Vw_M416.MeWi = dbo.Vw_M316.HsWi AND
    
                          dbo.Vw_M416.MeHs = dbo.Vw_M316.HsHs INNER JOIN
                          dbo.Vw_M216 ON
    
                          dbo.Vw_M416.MeWi = dbo.Vw_M216.WiWi

    Wenn Vw_M316.HsPn <> 0 ist, dann soll auch Vw_M316.HsPn angezeigt werden. Ist Vw_M316.HsPn = 0 dann soll Vw_M216.WiPn angezeigt werden. Wie muß es richtig aussehen?

    Ich habe mir auch den Thread http://social.technet.microsoft.com/Forums/de-DE/sqlserverde/thread/bdc1f996-7141-4747-8cd8-76033741cf54 "Frage zu CASE WHEN" schon angesehen.

    Vielen Dank schon im Voraus.

    EDIT: Das ganze passiert auf einem SQL 2000 SP4. Ich weiß, im Laufe des Jahres wird Ersatz kommen. ;)

    Servus

    Winfried



    Mittwoch, 22. Februar 2012 14:44

Antworten

  • Hallo Winfried,

    CASE ist wie IIF eine Funktion, wenn auch mit anderer (und erweiterter) Syntax,
    die man weiter schachteln kann:

    CASE WHEN [_M416].[PnPn] <> 0
        THEN [_M416].[PnPn]
        ELSE
            CASE WHEN [_M316].[PnPn] <> 0
                THEN [_M316].[PnPn]
                ELSE [_M216].[PnPn]
            END
    END AS PnPo
    
    Gruß Elmar

    Mittwoch, 22. Februar 2012 15:36
    Beantworter

Alle Antworten

  • Hallo Winfried,

    CASE ist wie IIF eine Funktion, wenn auch mit anderer (und erweiterter) Syntax,
    die man weiter schachteln kann:

    CASE WHEN [_M416].[PnPn] <> 0
        THEN [_M416].[PnPn]
        ELSE
            CASE WHEN [_M316].[PnPn] <> 0
                THEN [_M316].[PnPn]
                ELSE [_M216].[PnPn]
            END
    END AS PnPo
    
    Gruß Elmar

    Mittwoch, 22. Februar 2012 15:36
    Beantworter
  • Am 22.02.2012 schrieb Elmar Boye [MVP]:
    Hallo Elmar,

    CASE ist wie IIF eine Funktion, wenn auch mit anderer (und erweiterter) Syntax,
    die man weiter schachteln kann:

    das habe ich nachgelesen. Auch habe ich sehr viel probiert bevor ich
    hier gepostet habe.

    CASE WHEN [_M416].[PnPn] <> 0
        THEN [_M416].[PnPn]
        ELSE
            CASE WHEN [_M316].[PnPn] <> 0
                THEN [_M316].[PnPn]
                ELSE [_M216].[PnPn]
            END
    END AS PnPo

    Vielen Dank, das funktioniert. ;)

    Servus
    Winfried


    Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
    GPO's: http://www.gruppenrichtlinien.de
    Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

    Mittwoch, 22. Februar 2012 18:44