2016-07-04 9 views
1

Ich versuche, eine Abfrage zu schreiben, die Bilanz SAP Business eins macht. Ich habe eine Berechnung Summe da drin und ich mag es so sein:IF ELSE In Spaltenauswahl

if SUM(T1.Credit-T1.Debit) > 0 
    show the value in column "Positive Total" and in negative total put 0 or something. 
if SUM(T1.Credit-T1.Debit) < 0 
    show the value in column "Negative Total" and in "Positive total" put 0 or something. 

Der Code ist:

SELECT T1.Account, Isnull((SELECT SUM(T3.Debit - T3.Credit) 
          FROM OJDT T2 
          INNER JOIN JDT1 T3 ON T2.TransId = T3.TransId 
          INNER JOIN OACT o ON o.AcctCode = T3.Account 
          WHERE DateDiff(dd,T2.RefDate,'20140101') > 0 
          AND T3.Account LIKE T1.Account 
          GROUP BY T3.Account),0) AS 'Opening Balance', 
     SUM(T1.Debit) AS 'Debit', 
     SUM(T1.Credit) AS 'Credit', 
     SUM(T1.Credit-T1.Debit) AS 'Positive Total', 
     SUM(T1.Credit-T1.Debit) AS 'Negative Total' 
     ,AcctName, GroupMask,Levels, 
     (CASE GroupMask 
     WHEN 1 THEN 'ASSET' 
     WHEN 2 THEN 'LIABILITIES' 
     WHEN 3 THEN 'Capital and Reserves' 
     WHEN 4 THEN 'Turnover' 
     WHEN 5 THEN 'Cost of Sales' 
     WHEN 6 THEN 'Operating Costs' 
     WHEN 7 THEN 'Non-Operating Income and Expenditure' 
     ELSE 'NOT INCLUDED' 
     END) [GROUP] 
FROM OJDT T0 
    INNER JOIN JDT1 T1 ON T0.TransId = T1.TransId 
    INNER JOIN OACT T4 ON T4.AcctCode = T1.Account 
WHERE T0.RefDate BETWEEN '20150101' AND '20160131' 
GROUP BY T1.Account, AcctName, GroupMask, Levels 
Having SUM(T1.Debit - T1.Credit) != 0 
ORDER BY T1.Account 

Vielen Dank im Voraus, Almog.

+1

MySQL oder MS SQL Server? (Nicht gekennzeichnete Produkte nicht kennzeichnen.) – jarlh

+0

Entschuldigung, MS SQL. Danke wieder – Almog

+0

Sie erhalten keinen Syntaxfehler von diesem Code? Ich bin nicht judgisch, aber der Code ist total chaotisch, ich kann den Punkt der Gruppe nach dem Teil nicht sehen, und dieser ISNULL hat mich wirklich verwirrt. Bitte überprüfe zumindest deinen Code und frage dann, was du brauchst –

Antwort

1

Versuchen Sie folgendes:

CASE WHEN SUM(T1.Credit-T1.Debit) > 0 
    THEN SUM(T1.Credit-T1.Debit) 
    ELSE 0 
END 'Positive Total', 
CASE WHEN SUM(T1.Credit-T1.Debit) < 0 
    THEN SUM(T1.Credit-T1.Debit) 
    ELSE 0 
END AS 'Negative Total' 
+1

Vielen Dank !!! – Almog

0

Sie können Ihre aktuelle Abfrage als Sub-Abfrage und schreiben Sie eine select-Anweisung über sie verwenden.

Beachten Sie auch, dass Sie in diesem Fall die Klausel Order By in die äußere Abfrage verschieben müssen und auch SUM(T1.Credit - T1.Debit) zweimal in der inneren Abfrage nicht angeben müssen!

starten:

SELECT * , 
    CASE WHEN K.[Total] > 0 THEN K.[Total] 
     ELSE 0 
    END AS 'Positive Total' , 
    CASE WHEN K.[Total] < 0 THEN K.[Total] 
     ELSE 0 
    END AS 'Negative Total' 
FROM (SELECT T1.Account , 
       ISNULL((SELECT SUM(T3.Debit - T3.Credit) 
         FROM OJDT T2 
           INNER JOIN JDT1 T3 ON T2.TransId = T3.TransId 
           INNER JOIN OACT o ON o.AcctCode = T3.Account 
         WHERE DATEDIFF(dd, T2.RefDate, '20140101') > 0 
           AND T3.Account LIKE T1.Account 
         GROUP BY T3.Account 
         ), 0) AS 'Opening Balance' , 
       SUM(T1.Debit) AS 'Debit' , 
       SUM(T1.Credit) AS 'Credit' , 
       SUM(T1.Credit - T1.Debit) AS 'Total' , 
       --SUM(T1.Credit - T1.Debit) AS 'Negative Total' , 
       AcctName , 
       GroupMask , 
       Levels , 
       (CASE GroupMask 
        WHEN 1 THEN 'ASSET' 
        WHEN 2 THEN 'LIABILITIES' 
        WHEN 3 THEN 'Capital and Reserves' 
        WHEN 4 THEN 'Turnover' 
        WHEN 5 THEN 'Cost of Sales' 
        WHEN 6 THEN 'Operating Costs' 
        WHEN 7 THEN 'Non-Operating Income and Expenditure' 
        ELSE 'NOT INCLUDED' 
        END) [GROUP] 
     FROM  OJDT T0 
       INNER JOIN JDT1 T1 ON T0.TransId = T1.TransId 
       INNER JOIN OACT T4 ON T4.AcctCode = T1.Account 
     WHERE  T0.RefDate BETWEEN '20150101' AND '20160131' 
     GROUP BY T1.Account , 
       AcctName , 
       GroupMask , 
       Levels 
     HAVING SUM(T1.Debit - T1.Credit) != 0 
    ) AS K 
Order By K.Account