我有 2 个要连接的 SQL 语句。第一个获取营业额帐户每月的实际数据。第二个查询获取相同营业额帐户的预算(如果有)。
查询 1 实际值
/* Turnover 1 */
SELECT * FROM
(
SELECT T0.AcctCode AS 'SAP Code', T0.AcctName AS 'Description', T0.FatherNum, 1 AS 'Group', 'Turnover' [Definition],
MONTH(T1.RefDate) AS Month, SUM(T1.Debit - T1.Credit) AS 'Amount'
FROM OACT T0
LEFT JOIN JDT1 T1 ON T0.[AcctCode] = T1.[Account]
LEFT JOIN OBGT T2 ON T0.[AcctCode] = T2.[AcctCode]
WHERE T0.GroupMask = 4 AND T0.Levels = 5
AND (T1.RefDate BETWEEN '20150101' AND '20151231')
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
查询 2 预算
/* Turnover 1 */
SELECT * FROM
(
SELECT T0.AcctCode AS 'AcctCode', T3.AcctName AS 'Description', T3.FatherNum, 1 AS 'Group', 'Turnover' [Definition],
CASE WHEN (T1.CredLTotal IS NULL OR T1.CredLTotal = 0) THEN T1.DebLTotal ELSE T1.CredLTotal END AS BudgetAmt, T1.Line_ID AS 'LineID'
FROM OBGT T0 INNER JOIN BGT1 T1 ON T0.[AbsId] = T1.[BudgId]
INNER JOIN OACT T3 ON T0.[AcctCode] = T3.[AcctCode]
WHERE T3.GroupMask = 4) AS q
PIVOT
(
SUM(BudgetAmt)
FOR LineID IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11])
) AS P
对于第二个查询,0 代表一月,1 代表二月……而 11 代表十二月。
如何组合这 2 个查询以便我可以获得如下数据?
不重复,因为它包含检索预算的查询。
使用union all
与您在其他问题中使用的方式相同,结合 2 个查询
这个想法是完全一样的。
你所要做的就是
我想,如果我理解正确的话,我已经为你修改了它,见下图。
它是一个 UNION ALL 加上一个 CASE。
创建表格来完成练习有点麻烦。
我相信,如果我理解得很好,你想要像上图这样的东西。
如果那不对,那么请创建一张你需要的图片,即使你在 excel 中这样做,但请尝试根据下面脚本中的表格使用这些值。或者用一些脚本将数据插入其中来发布您的表定义,那么我们肯定会在同一页面上。
另外,我没有包括您的所有专栏,如果它们真的很重要,您可以将它们添加到下面的脚本中。