如何解决从数据透视表-SQL Server / SAP B1中求和各个动态列
我写了一个基于SAP Business One DB的sql Server查询,我有一个动态列列表,我正在PIVOT中使用这些列来创建动态column.im,因为经过“ PrcName”传递后,它们当前正在获取单独的数据。归入Pivot。 我希望能够对#TEMP表中的每个动态列求和,以求和各个“ PrcName”行。就是这样:SUM('+ @Columns +')
下面的查询给我这样的东西:
Type FatherAccount levels AcctCode AccntntCod AcctName Group1 Group2 Project1 Project2
Expense Cost 11 1000002 400002 Resource 0 0 1000 0
Expense Cost 11 1000002 400002 Resource 0 0 0 2000
但是我试图将它们总结为:
Type FatherAccount levels AcctCode AccntntCod AcctName Group1 Group2 Project1 Project2
Expense Cost 11 1000002 400002 Resource 0 0 1000 2000
SELECT * INTO #TEMP FROM(
SELECT Type,FatherAccount,Levels,[AcctCode],[AccntntCod],[AcctName],[Tender],[OverHead],' + @Columns + '
FROM
(SELECT
CASE WHEN T0.GroupMask IN (''4'') THEN ''Revenue'' ELSE ''Expense'' END AS "Type",T5.AcctName AS "FatherAccount",''11'' AS Levels,T0.[AcctCode],T0.[AccntntCod],T0.[AcctName],CASE WHEN T2.PrcName LIKE ''%Group1%'' THEN SUM(T1.[Debit] - T1.[Credit])END AS Group1",CASE WHEN T2.PrcName LIKE ''%Group2%'' THEN SUM(T1.[Debit] - T1.[Credit])END AS "Group1",SUM(T1.[Debit] - T1.[Credit]) AS Balance,T2.[PrcName] AS PrcName,ROW_NUMBER() OVER(PARTITION BY T0.AcctName,SUM(T1.[Debit] - T1.[Credit]) ORDER BY T0.AcctCode DESC) rn
FROM OACT T0
LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account]
LEFT JOIN OPRC T2 ON T2.PrcCode = T1.ProfitCode
LEFT JOIN OPRC T3 ON T3.PrcCode = T1.OcrCode2
LEFT JOIN OPRC T4 ON T4.PrcCode = T1.OcrCode3
LEFT JOIN OACT T5 ON T5.AcctCode = T0.FatherNum
WHERE T0.GroupMask IN (''4'',''5'',''6'',''7'') AND (T0.Postable = ''Y'')
AND ((T1.RefDate Between ''[%0]'' AND ''[%1]'') OR T0.CurrTotal = 0)
AND (T4.PrcName = ''[%2]'' OR T0.CurrTotal = 0)
--GROUP BY GROUPING SETS ((T0.Levels,T5.AcctName,T2.PrcName,T0.GroupMask),(T5.AcctName))
--GROUP BY T0.Levels,T0.GroupMask
) as PivotData
PIVOT
(
SUM(Balance)
FOR PrcName IN (' + @Columns + ')
) AS PivotResult
) AS #TEMP
SELECT T0.Type,T0.FatherAccount,T0.levels,T0.AcctCode,T0.AccntntCod,T0.AcctName,SUM(T0.Group1) AS Group1,SUM(T0.Group2) AS Group1,SUM(' + @Columns + ')
FROM #TEMP T0
GROUP BY T0.Type,' + @Columns + '
ORDER BY Type,FatherAccount
感谢您的帮助!
解决方法
不将PrcName列中的值添加到数据透视表中,此查询是否返回正确的输出?
SELECT CASE WHEN T0.GroupMask IN ('4') THEN 'Revenue' ELSE 'Expense' END AS [Type],T5.AcctName AS FatherAccount,'11' AS Levels,T0.[AcctCode],T0.[AccntntCod],T0.[AcctName],T2.[PrcName] AS PrcName,sum(CASE WHEN T2.PrcName LIKE '%Group1%' THEN (T1.[Debit] - T1.[Credit]) else 0 END) AS Group1,sum(CASE WHEN T2.PrcName LIKE '%Group2%' THEN (T1.[Debit] - T1.[Credit]) else 0 END) AS Group2,SUM(T1.[Debit] - T1.[Credit]) AS Balance
FROM OACT T0
LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account]
LEFT JOIN OPRC T2 ON T2.PrcCode = T1.ProfitCode
LEFT JOIN OPRC T3 ON T3.PrcCode = T1.OcrCode2
LEFT JOIN OPRC T4 ON T4.PrcCode = T1.OcrCode3
LEFT JOIN OACT T5 ON T5.AcctCode = T0.FatherNum
WHERE T0.GroupMask IN ('4','5','6','7')
AND (T0.Postable = 'Y')
AND ((T1.RefDate Between '[%0]' AND '[%1]') OR T0.CurrTotal = 0)
AND (T4.PrcName = '[%2]' OR T0.CurrTotal = 0)
GROUP BY [Type],T5.AcctName,T2.PrcName;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。