2017-10-19 2 views
0

Hallo Ich habe diese Abfrage, wo ich meine Kundenbilanz als Bericht später verwenden kann. Aber ich bin irgendwie auf diesem Teil fest, wo die 2 Spalten das Ergebnis zu einer anderen Spalte berechnen und betrachten sollten, der schwierigere Teil ist, dass sie auf der anderen Reihe sind. Also hier ist meine FrageSQL - Berechnen Sie 2 Spalten und sehen Sie das Ergebnis in einer anderen Spalte

SELECT ROW_NUMBER() OVER(ORDER BY DR.id)     AS 'NO.' ,   
     CONVERT(VARCHAR(13), CAST(DR.doc_date AS DATE), 100) AS 'DOC DATE', 
     v.which AS 'DOC TYPE', 
     CASE WHEN 
      v.which IN ('NET TOTAL', 'DELL/COL/CHARGE') THEN V.val 
      END AS DEBIT, 
     CASE WHEN 
      v.which IN ('CDW', 'PAYMENT') THEN V.val 
      END AS CREDIT, 
     CAST(v.val AS float) + CAST(v.val AS float) AS 'BALANCE' 

FROM [dbo].[doc_customer] DC 
LEFT JOIN [dbo].[doc_rent] DR ON DR.doc_sourced_customer_id = DC.id 
LEFT JOIN [dbo].[slip_rent] SR ON SR.doc_sourced_doc_rent_id = DR.id 
LEFT JOIN [dbo].[slip_rent_payment] SP ON SP.doc_sourced_rent_id = DR.id OUTER APPLY 
    (VALUES ('NET TOTAL', SR.net_total), 
      ('DELL/COL/CHARGE', SR.dell_col_charge), 
      ('CDW', SR.CDW), 
      ('PAYMENT', sp.amount) 
    ) v(which, val) 
WHERE DC.id = '1-1---1-1-1---1--1~1' 
AND DR.deleted = 0 
AND DR.void = 0 
AND v.val IS NOT NULL 
AND v.val <> '' ; 

Da u in meiner Abfrage sehen kann ich das Soll und Haben Wert bekommen kann, aber mein Problem ist , wie Summe ihrer Berechnung zu erhalten.


Meine Wunsch Ausgabe

| NO. | DOC DATE | DOC TYPE | DEBIT | CREDIT | BALANCE 
------------------------------------------------------------- 
1 | 1 | Mar 28 2017 | NET TOTAL | 341 | NULL | 
2 | 2 | Mar 28 2017 | PAYMENT | NULL | 4000 | -3659 
3 | 3 | Oct 16 2017 | NET TOTAL | 150 | NULL | -3509 
4 | 4 | Oct 16 2017 | CDW  | NULL | 50  | -3559 
5 | 5 | Oct 16 2017 | PAYMENT | NULL | 150 | -3709 

Hier ist der Link für meine gewünschte Ausgabe sql desired output

+0

Ich fügte die gewünschte Ausgabe als formatierter Text hinzu Und nicht jeder kann Bilder öffnen und nicht alle Geräte können die Bilder auf ihrem kleinen Bildschirm deutlich lesen. Während dies sich auf Code bezieht, gilt es auch sehr für wichtige Informationen wie aktuelle und erwartete Ausgaben. ► [** Warum laden Sie nicht Bilder von Code auf SO hoch, wenn Sie eine Frage stellen? **] (https://meta.stackoverflow.com/ Fragen/285551/Warum-nicht-Upload-Bilder-of-Code-auf-so-wenn-eine Frage zu stellen/285557 # 285557) – Nope

+0

Danke. Ich wusste nicht, Stackoverflow kann so tun. –

Antwort

0

wenn diese SQL Server 2012 oder höher, Sie ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW wie dies wollen (Sie einen Indexer müssen feststellen, also wählte ich [Nr.]:

SELECT [NO.], Debit, Credit, 
    SUM(coalesce(Debit,0) - coalesce(Credit,0)) OVER(ORDER BY [NO.] 
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
      AS BALANCE 
FROM 
(
SELECT ROW_NUMBER() OVER(ORDER BY DR.id)     AS 'NO.' ,   
     CONVERT(VARCHAR(13), CAST(DR.doc_date AS DATE), 100) AS 'DOC DATE', 
     v.which AS 'DOC TYPE', 
     CASE WHEN 
      v.which IN ('NET TOTAL', 'DELL/COL/CHARGE') THEN V.val 
      END AS DEBIT, 
     CASE WHEN 
      v.which IN ('CDW', 'PAYMENT') THEN V.val 
      END AS CREDIT, 
     CAST(v.val AS float) + CAST(v.val AS float) AS 'BALANCE' 

FROM [dbo].[doc_customer] DC 
LEFT JOIN [dbo].[doc_rent] DR ON DR.doc_sourced_customer_id = DC.id 
LEFT JOIN [dbo].[slip_rent] SR ON SR.doc_sourced_doc_rent_id = DR.id 
LEFT JOIN [dbo].[slip_rent_payment] SP ON SP.doc_sourced_rent_id = DR.id OUTER APPLY 
    (VALUES ('NET TOTAL', SR.net_total), 
      ('DELL/COL/CHARGE', SR.dell_col_charge), 
      ('CDW', SR.CDW), 
      ('PAYMENT', sp.amount) 
    ) v(which, val) 
WHERE DC.id = '1-1---1-1-1---1--1~1' 
AND DR.deleted = 0 
AND DR.void = 0 
AND v.val IS NOT NULL 
AND v.val <> '' 
) a 
+0

es funktioniert wie Magie! sehr hilfreich. Vielen Dank ! –

Verwandte Themen