2016-03-18 21 views
5

Ho questa query SQL che utilizzo per trovare i movimenti del saldo di prova per account al mese.SQL - Restituzione dei valori cumulativi mensili delle colonne

/* 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 

Questo restituisce i seguenti risultati da giugno:

enter image description here

Vorrei includere risultati mensili cumulativi per tutte le righe tali che fila 1 risultati dovrebbero essere:

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

Non ho avuto successo nel raggiungere questo obiettivo. Come posso modificare la query per raggiungere questo obiettivo?

Dati aggiuntivi:

la query:

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' 

Ritorni:

enter image description here

+0

Fornire alcuni dati di test – TheGameiswar

+0

Ho aggiunto qualche altra informazione –

risposta

3

È necessario esterno di selezione in cui si aggiungono le colonne ad un altro:

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, Provare a modo tuo non restituisce alcun risultato ... solo valori nulli. –

+0

Ho modificato la mia risposta - aggiungendo colonne in selezione quando la rotazione non funziona, ma è possibile selezionare queste colonne e utilizzare un'altra selezione da selezionare in cui è possibile aggiungere colonne a un'altra – dey

0

Il modo più diretto è quello di eseguire il dump dei risultati del perno in una tabella temporanea o, se il set di dati è abbastanza piccolo, una variabile di tabella. Quindi usa UNION per ottenere i risultati cumulativi e le sottocategorie dal PIVOT. Ecco un esempio che utilizza una variabile di tabella.

/* 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

Se ho capito la tua domanda correttamente, è necessario risultati mensili cumulati in una fila con separati da virgola addebiti valori

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) 

Ora la query riportata di seguito fornirà risultati in una riga con valori separati da virgola.

Problemi correlati