2017-02-21 1 views
1

Ich habe diese Abfrage, wo ich denke, mein Zustand ist wahr, aber irgendwie gibt es falsche Ausgabe.Unter Case-Anweisung else Teil gibt falsche Ausgabe

SELECT CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit END AS 'debit', 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit END AS 'credit',docdate,DATEDIFF(d,DocDate, GETDATE()) AS days, 
CASE WHEN DATEDIFF(d,DocDate, GETDATE()) <= 365 THEN SecDebit ELSE 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN -seccredit ELSE 0 END END AS 'secdebitlessthen365', 
CASE WHEN DATEDIFF(d, DocDate, GETDATE()) > 365 AND DATEDIFF(d, DocDate, GETDATE()) <= 730 THEN SecDebit ELSE 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN -seccredit ELSE 0 END END AS 'secdebitgreaterthen365lessthenorequa730', 
CASE WHEN DATEDIFF(d, DocDate, GETDATE()) > 730 AND DATEDIFF(d, DocDate, GETDATE()) <= 1095 THEN SecDebit ELSE 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN -seccredit ELSE 0 END END AS 'secdebitgreaterthen730lessthenorequal1095', 
CASE WHEN DATEDIFF(d, DocDate, GETDATE()) > 1095 THEN SecDebit ELSE 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN -seccredit ELSE 0 END END AS 'secdebitgreaterthen1095' 
FROM J_Transactions (NOLOCK) j 
WHERE AccountID IN (871446) 
AND j.DocTypeID=0 

Nur für Kredit meine sonst Aussage falsch läuft

Meine Ausgabe ist

debit  credit  days secdebit<365 secdebit>365<=730 secdebit>730<=1095 secdebit>1095 
24196.5000 NULL  783  0.0000   0.0000   24196.5000  0.0000  
NULL  24471.6500 418 -24471.6500  0.0000   -24471.6500  -24471.6500  
NULL  10.5800  418 -10.5800  0.0000   -10.5800  -10.5800 

Für Kredit ist an beiden Tagen 418, die unter secdebit> 365 < = 730 kommen sollte, sondern es ist überall reinkommen außer dem richtigen. Kann mir jemand sagen, was in diesem

Wunsch Ausgang

debit  credit  days secdebit<365 secdebit>365<=730 secdebit>730<=1095 secdebit>1095  
24196.5000 NULL  783  0.00   0.0000    24196.5000   0.00  
NULL  24471.6500 418  0.00   -24471.65    0.00    0.00 
NULL  10.5800  418  0.00   -10.5800    0.00    0.00 
+0

Warum unten abstimmen ??? –

+0

Pls post Ihre gewünschte Ausgabe – Kalyan

+0

Case Ausdruck, nicht Case Aussage ... – jarlh

Antwort

1

ich Ihre gesamte Abfrage neu zu schreiben, werde nicht falsch ist, aber ich glaube, Sie case-Anweisungen ändern möchten eine Struktur eher wie dieses folgen :

CASE WHEN DATEDIFF(d, DocDate, GETDATE()) <= 365 THEN 
    CASE WHEN CreditOrDebit = 'd' THEN SecDebit 
    ELSE -seccredit END 
ELSE 0 END AS 'secdebitlessthan365' 
+1

groß das ist, was ich wollte !!!! Ich habe deine Antwort darauf geschätzt. Vielen Dank !!!!!!!! –

0

Ich kann Ihre Geschäftslogik nicht verstehen. Basierend auf dem von Ihnen bereitgestellten Code besteht das Problem darin, dass die Anweisung "Else" nicht über die Logik für die Days-Prüfung verfügt. Ich habe das gleiche hinzugefügt. Bitte probieren Sie es aus.

SELECT CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'd' THEN SecDebit END AS 'debit', 
CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN SecCredit END AS 'credit', 
docdate, 
DATEDIFF(d,DocDate, GETDATE()) AS days, 
CASE 
    WHEN DATEDIFF(d,DocDate, GETDATE()) <= 365 THEN 
     CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN 
      -seccredit 
     ELSE 
      SecDebit 
     END 
END AS 'secdebitlessthen365', 

CASE 
    WHEN DATEDIFF(d, DocDate, GETDATE()) > 365 AND DATEDIFF(d, DocDate, GETDATE()) <= 730 THEN 
     CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN 
      -seccredit 
     ELSE 
      SecDebit 
     END 
END AS 'secdebitgreaterthen365lessthenorequa730', 

CASE WHEN DATEDIFF(d, DocDate, GETDATE()) > 730 AND DATEDIFF(d, DocDate, GETDATE()) <= 1095 THEN 
     CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN 
      -seccredit 
     ELSE 
      SecDebit 
     END 
END AS 'secdebitgreaterthen730lessthenorequal1095', 
CASE WHEN DATEDIFF(d, DocDate, GETDATE()) > 1095 THEN 
     CASE WHEN j.DocTypeID=0 AND CreditOrDebit = 'c' THEN 
      -seccredit 
     ELSE 
      SecDebit 
     END 
END AS 'secdebitgreaterthen1095' 
FROM J_Transactions (NOLOCK) j 
WHERE AccountID IN (871446) 
AND j.DocTypeID=0 
+0

Es gibt 0,00 in allen Kredit –