Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用Pivot和前几个月所需余额总和的逐月数据_Sql_Sql Server_Tsql - Fatal编程技术网

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