2016-07-04 2 views
1

대차 대조표가 SAP Business One 인 쿼리를 작성하려고합니다. 내가 거기에 합 계산을하고 난 그것이 그렇게되고 싶어요 :IF ELSE In 열 선택

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. 

코드는 다음과 같습니다 사전에

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 

감사합니다, 제작 : Almog.

+1

MySQL의 또는 MS SQL 서버 :

이 시도? (관련되지 않은 제품에 태그를 지정하지 마십시오.) – jarlh

+0

죄송합니다. MS SQL. 감사합니다. – Almog

+0

그 코드에서 구문 오류가 발생하지 않습니까? 나는 판단력이 없지만 코드는 총 난장판이다. 나는 그룹의 요점을 부분적으로 볼 수 없다. 그리고이 ISNULL은 정말로 나를 혼란스럽게 만든다. 최소한 코드를 검사하고 필요한 것을 물어보십시오. –

답변

1

이 시도 :

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

대단히 감사합니다 !!! – Almog

0

당신은 서브 쿼리로 현재 쿼리를 사용하고 그 위에 select 문을 작성할 수 있습니다.

또한이 경우 Order By 절을 외부 쿼리로 이동해야하며 내부 쿼리에서 SUM(T1.Credit - T1.Debit)을 두 번 지정할 필요가 없습니다.

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 
관련 문제