2016-03-18 13 views
5

Ich habe diese SQL-Abfrage, mit der ich Trial Balance-Bewegungen pro Konto pro Monat finde.SQL - Rückgabe kumulativer monatlicher Spaltenwerte

/* Fixed Assets 1 */ 
SELECT * FROM 
(
    SELECT T0.AcctCode AS 'SAP Code', T0.AcctName AS 'Description', 
    MONTH(T1.RefDate) AS Month, SUM(T1.Debit - T1.Credit) AS 'Amount' 
    FROM OACT T0 
    LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account] 
    WHERE T0.AcctCode LIKE '111%' AND T0.Levels = 5 
    AND (T1.RefDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,{?AsAtDate}), 0) AND {?AsAtDate}) 
    GROUP BY T0.AcctCode, T0.AcctName, T0.FatherNum, T1.RefDate) AS q 
    PIVOT 
(
SUM(Amount) 
FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
) AS query 

Dies liefert folgende Ergebnisse von Juni:

enter image description here

ich eine solche kumulierte Monatsergebnisse für alle Zeilen aufnehmen möchten, dass Zeile 1 Ergebnisse sein sollte:

1, 111110, Building Gross Value, 633604.23, 637764.23, 645313.03, 649061.78, 651097.78, 651097.78, 651397.78 

Ich habe das nicht erreicht. Wie ändere ich die Abfrage, um dies zu erreichen?

Weitere Angaben:

Die Abfrage:

SELECT CAST(T0.TaxDate AS Date), T0.Account, T1.AcctName, T0.Debit, T0.Credit 
FROM JDT1 T0 INNER JOIN OACT T1 
ON T0.Account = T1.AcctCode 
WHERE T0.[Account] = '111110' 

Returns:

enter image description here

+0

Geben Sie einige Testdaten – TheGameiswar

+0

Ich habe einige weitere Informationen hinzugefügt –

Antwort

3

Sie müssen äußere wählen, in dem Sie Ihre Spalten zu einem anderen hinzuzufügen:

SELECT AcctCode AS 'SAP Code', AcctName AS 'Description', 
col1 AS '1', 
col1 + col2 AS '2', 
col1 + col2 + col3 AS '3', 
... FROM (
    SELECT AcctCode, AcctName, 
    [1] AS col1, 
    [2] AS col2, 
    [3] AS col3, 
    ... FROM 
    (
     SELECT T0.AcctCode, T0.AcctName, 
     MONTH(T1.RefDate) AS Month, SUM(T1.Debit - T1.Credit) AS 'Amount' 
     FROM OACT T0 
     LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account] 
     WHERE T0.AcctCode LIKE '111%' AND T0.Levels = 5 
     AND (T1.RefDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,{?AsAtDate}), 0) AND {?AsAtDate}) 
     GROUP BY T0.AcctCode, T0.AcctName, T0.FatherNum, T1.RefDate) AS q 
     PIVOT 
    (
    SUM(Amount) 
    FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
    ) AS query 
) 
+0

Hmm, versuchen Sie es auf Ihre Weise gibt keine Ergebnisse zurück ... nur null Werte. –

+0

Ich habe meine Antwort bearbeitet - das Hinzufügen von Spalten in Auswahl beim Pivotieren funktioniert nicht, aber Sie können diese Spalten auswählen und eine andere Auswahl aus auswählen, in der Sie Spalten zu einer anderen hinzufügen können – dey

0

Der direkteste Weg ist es, die Ergebnisse des Schwenk in eine temporäre Tabelle zu entleeren oder, Wenn der Datensatz ziemlich klein ist, eine Tabellenvariable. Verwenden Sie dann einfach UNION, um Ihre kumulativen Ergebnisse und Unterkategorien vom PIVOT zu erhalten. Hier ist ein Beispiel, das eine Tabellenvariable verwendet.

/* Fixed Assets 1 */ 
SELECT * 
INTO #FixedAssets FROM 
(
    SELECT T0.AcctCode AS 'SAP Code', T0.AcctName AS 'Description', 
    MONTH(T1.RefDate) AS Month, SUM(T1.Debit - T1.Credit) AS 'Amount' 
    FROM OACT T0 
    LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account] 
    WHERE T0.AcctCode LIKE '111%' AND T0.Levels = 5 
    AND (T1.RefDate BETWEEN DATEADD(yy, DATEDIFF(yy,0,{?AsAtDate}), 0) AND {?AsAtDate}) 
    GROUP BY T0.AcctCode, T0.AcctName, T0.FatherNum, T1.RefDate) AS q 
    PIVOT 
(
SUM(Amount) 
FOR [Month] IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12]) 
) AS query 
GO 

SELECT 
     [SAP Code] = '111110' 
    , [Description] = 'Building Gross Value' 
    , [1]   = SUM([1]) 
    , [2]   = SUM([2]) 
    , [3]   = SUM([3]) 
    , [4]   = SUM([4]) 
    , [5]   = SUM([5]) 
    , [6]   = SUM([6]) 
    , [7]   = SUM([7]) 
    , [8]   = SUM([8]) 
    , [9]   = SUM([9]) 
    , [10]   = SUM([10]) 
    , [11]   = SUM([11]) 
    , [12]   = SUM([12]) 
UNION 
SELECT * FROM #FixedAssets 
ORDER BY 1 
0

Wenn ich Ihre Frage richtig verstanden, Sie mit Komma kumulativen monatlichen Ergebnisse in einer Reihe müssen getrennt Debet Werte

create table a 
(dateval date, acc int,accname varchar(100), debit decimal(10,2)) 

insert into a 
values 
('20150630', 111110, 'Building Gross Value', 633604.230), 
('20150731', 111110, 'Building Gross Value', 2760.000000), 
('20150730', 111110, 'Building Gross Value', 1400.000000), 
('20150808', 111110, 'BUIIdlngGrossValue', 1890.00), 
('20150811', 111110, 'BUIIdlnanossValue', 180.00), 
('20150811', 111110, 'Building Gross Value', 375.000000), 
('20150819', 111110, 'Building Gross Value', 2622.200000), 
('20150821', 111110, 'Building Gross Value', 360.000000), 
('20150822', 111110, 'Building Gross Value', 21.600000), 
('20150824', 111110, 'Building Gross Value', 100.000000), 
('20150825', 111110, 'Building Gross Value', 770.000000), 
('20150829', 111110, 'Building Gross Value', 100.000000), 
('20150831', 111110, 'Building Gross Value', 340.000000), 
('20150831', 111110, 'Building Gross Value', 790.000000), 
('20150924', 111110, 'Building Gross Value' ,918.750000), 
('20150928', 111110, 'Building Gross Value', 2830.000000), 
('20151005', 111110, 'Building Gross Value', 1411.000000), 
('20151023', 111110, 'Building Gross Value', 625.000000) 

Jetzt die folgende Abfrage gibt Ihnen Ergebnisse in einer Zeile mit durch Kommas getrennten Werten ..

Verwandte Themen