Sql 使用Pivot和前几个月所需余额总和的逐月数据
我有以下数据:Sql 使用Pivot和前几个月所需余额总和的逐月数据,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下数据: Party Balance Month --------------------- ABC 500 Aug 2013 ABC 300 Sep 2013 ABC 200 Nov 2013 ABC 400 Dec 2013 ABC 100 Jan 2013 我尝试了以下查询: select ahead as Party, [Nov 2013], [Dec 2013], [Jan 2014] f
Party Balance Month
---------------------
ABC 500 Aug 2013
ABC 300 Sep 2013
ABC 200 Nov 2013
ABC 400 Dec 2013
ABC 100 Jan 2013
我尝试了以下查询:
select
ahead as Party, [Nov 2013], [Dec 2013], [Jan 2014]
from
(select
ahead, month, balance
from aging) as a
PIVOT
(SUM (balance)
FOR [month] in ([Nov 2013], [Dec 2013], [Jan 2014])
) as Pivot_Table
group by
ahead, [Nov 2013], [Dec 2013], [Jan 2014]
返回的结果如下所示:
Party Nov 2013 Dec 2013 Jan 2013
-----------------------------------------
ABC 200 400 100
Party Nov 2013 Dec 2013 Jan 2013 Old balance total Balance
-----------------------------------------------------------------------
ABC 200 400 100 800 1500
所需的结果如下:
Party Nov 2013 Dec 2013 Jan 2013
-----------------------------------------
ABC 200 400 100
Party Nov 2013 Dec 2013 Jan 2013 Old balance total Balance
-----------------------------------------------------------------------
ABC 200 400 100 800 1500
有人能帮我解决这个问题吗?=计算另一个派生表中的旧余额,您可以将其加入当前查询 试一试 MS SQL Server 2008架构设置: 问题1: :
现在总共有18行,而不是1行,如果我们还有一个TotalBalance列要添加[TotalBalance]呢
;WITH Totals
AS
(
SELECT Party, SUM(Balance) TotalBalance
FROM Test_Table
GROUP BY Party
),
Pvt
AS
(
select Party
,[Nov 2013]
,[Dec 2013]
,[Jan 2013]
FROM Test_Table as t
PIVOT
(SUM (balance)
FOR
[month]
in ([Nov 2013],[Dec 2013],[Jan 2013])
) as Pivot_Table
)
SELECT p.Party
,p.[Nov 2013]
,p.[Dec 2013]
,p.[Jan 2013]
,(t.TotalBalance) -(p.[Nov 2013]+ p.[Dec 2013]+p.[Jan 2013]) AS OldBalance
FROM pvt p INNER JOIN Totals t
ON p.Party = t.Party
| PARTY | NOV 2013 | DEC 2013 | JAN 2013 | OLDBALANCE |
|-------|----------|----------|----------|------------|
| ABC | 200 | 400 | 100 | 800 |
DECLARE @MyTable TABLE ([Party] varchar(max), [Balance] money, [Date] date)
INSERT @MyTable VALUES
('ABC',500,'Aug 2013'),
('ABC',300,'Sep 2013'),
('ABC',200,'Nov 2013'),
('ABC',400,'Dec 2013'),
('ABC',100,'Jan 2014');
WITH t AS (
SELECT
[Party],[Balance],[Date],
SUM(CASE WHEN [Date] < 'Nov 2013' THEN [Balance] END)
OVER(PARTITION BY [Party]) [OldBalance],
SUM([Balance])
OVER(PARTITION BY [Party]) [TotalBalance]
FROM @MyTable
)
SELECT [Party],[Nov 2013],[Dec 2013],[Jan 2014],[OldBalance],[TotalBalance]
FROM t
PIVOT(SUM([Balance]) FOR [Date] IN ([Nov 2013],[Dec 2013],[Jan 2014])) p