2

ODBC 経由で OpenEdge データベースに対する if ステートメントに苦労しています。私が持っているクエリは魅力のように機能しますが、プログレスは if ステートメントを別の方法で定義することを望んでおり、手がかりがありません。私のために正しいクエリを定義できる人はいますか?

    IF            
    {Crediteur code|type=string} = 'HOEFASTE'
 BEGIN       
    (SELECT
        inok."vest-kd-arvo"+RTRIM('-') + RIGHT(CAST((inok."inok-nr" + 1000000) AS varchar(7)),6) AS inokvalue
        ,RTRIM("leso-kd")+RTRIM('-')+inok."vest-kd-arvo"+RTRIM('-')+CAST("inok-nr"AS varchar(6)) AS inokdisplay
        ,RIGHT(CAST((inok."inok-nr") AS varchar(7)),6) + '-' + inok."vest-kd-arvo" + '-' + RTRIM("leso-kd") AS inoknr
        ,RTRIM("leso-kd") AS soortfact
    FROM
        PUB.inok
    WHERE
        inok."vcdc-nr" = {Administratie|type=int32}
        AND inok."inss-kd" NOT IN ('H','G')
    )
ELSE        
    (SELECT   
        inok."vest-kd-arvo"+RTRIM('-') + RIGHT(CAST((inok."inok-nr" + 1000000) AS varchar(7)),6) AS inokvalue
        ,RTRIM("leso-kd")+RTRIM('-')+inok."vest-kd-arvo"+RTRIM('-')+CAST("inok-nr"AS varchar(6)) AS inokdisplay
        ,RIGHT(CAST((inok."inok-nr") AS varchar(7)),6) + '-' + inok."vest-kd-arvo" + '-' + RTRIM("leso-kd") AS inoknr
        ,RTRIM("leso-kd") AS soortfact
    FROM
        PUB.inok
    WHERE
        inok."rela-kd-kre" = {Crediteur code|type=string}
        AND inok."vcdc-nr" = {Administratie|type=int32}
        AND inok."inss-kd" NOT IN ('H','G')
     )
END
4

1 に答える 1

1

私が正しく理解していればWHERE、「Crediteur code」に基づいて -clause のみが異なります。

WHERE-clause内で IF を移動できます。これにより、単一のSELECTステートメントが残ります。この代替手段はあなたのために働きますか?

SELECT   
    inok."vest-kd-arvo"+RTRIM('-') + RIGHT(CAST((inok."inok-nr" + 1000000) AS varchar(7)),6) AS inokvalue
    ,RTRIM("leso-kd")+RTRIM('-')+inok."vest-kd-arvo"+RTRIM('-')+CAST("inok-nr"AS varchar(6)) AS inokdisplay
    ,RIGHT(CAST((inok."inok-nr") AS varchar(7)),6) + '-' + inok."vest-kd-arvo" + '-' + RTRIM("leso-kd") AS inoknr
    ,RTRIM("leso-kd") AS soortfact
FROM
    PUB.inok
WHERE
    inok."rela-kd-kre" = (CASE WHEN {Crediteur code|type=string} = 'HOEFASTE' THEN inok."rela-kd-kre" ELSE {Crediteur code|type=string} END)
    AND inok."vcdc-nr" = {Administratie|type=int32}
    AND inok."inss-kd" NOT IN ('H','G')
于 2013-01-15T12:17:18.920 に答える