2017-02-03 4 views
2

У меня есть этот запрос: с КТР вфункция Pivot в SQL и сумма строк

(
Select distinct 
Account, 
Avg(TotalME_AUA)over (partition by sub.account) as avgAUA 
from 
(

SELECT Distinct wf_pm_asset_db.account, 
     Sum(wf_pm_asset_db.me_aua) OVER(PARTITION by wf_pm_asset_db.account, wf_pm_asset_db.yearmonth) AS TotalME_AUA, wf_pm_asset_db.yearmonth 
FROM wf_pm_asset_db 

WHERE (((wf_pm_asset_db.yearmonth) > '201512')) 
and wf_pm_asset_db.account in ('XXXXX0E','XXXXX0F','XXXXX0G', 'XXXXX0H') 
GROUP BY wf_pm_asset_db.account , wf_pm_asset_db.yearmonth, me_aua 
) sub 
group by Account ,totalME_AUA, sub.account,TotalME_AUA 
) 
Select distinct CASE 
       WHEN (LTRIM(RTRIM(ISM_HH_KEY)) <> '')--OR --(LTRIM(RTRIM(v.ISM_HH_KEY)) IS NOT NULL) 
        THEN LTRIM(RTRIM(ISM_HH_KEY)) 
        ELSE LEFT(LTRIM(RTRIM(WF_PM_ACCT_det_DB.ACCOUNT)), 6) 
       END AS 'HH', 
CTE.account, 
SUM(AvgAUA) as 'Avg_AUA' 
FROM CTE 
left join wf_pm_acct_det_db 
on CTE.account = wf_pm_acct_det_db.Account 
Group By wf_pm_acct_det_db.ISM_HH_Key, LEFT(LTRIM(RTRIM(WF_PM_ACCT_det_DB.ACCOUNT)), 6), cte.account 

и результаты выглядят следующим образом:

HouseID Account number Balance 
HHID Account 1 627.01 
HHID Account 2 829633.1317 
HHID Account 3 0 
HHID Account 4 -771703.1858 

я хочу выход, где я получаю это:

HouseID Account 1 Account 2 Account 3 Account 4 Total 
HHID 627.01  829633.1317  0  -771703.1858 58556.95583 

я попробовал поворотное с:

Select distinct CASE 
       WHEN (LTRIM(RTRIM(ISM_HH_KEY)) <> '')--OR --(LTRIM(RTRIM(v.ISM_HH_KEY)) IS NOT NULL) 
        THEN LTRIM(RTRIM(ISM_HH_KEY)) 
        ELSE LEFT(LTRIM(RTRIM(WF_PM_ACCT_det_DB.ACCOUNT)), 6) 
       END AS 'HH', 
account, 
SUM(AvgAUA) as 'Avg_AUA' 
From CTE 
FROM CTE 
left join wf_pm_acct_det_db 
on CTE.account = wf_pm_acct_det_db.Account 
Pivot 
(
SUM(AvgAUA) 
for CTE.account in (account1, account2) 
) as PT 

однако я получаю ошибки. может ли кто-нибудь посоветовать, как это сделать. Я использую SQL-сервер 2012

+0

Является ли номер счета один или два поля? –

ответ

1

Концептуально говоря, вам просто нужно взять ваш текущий запрос, который дает вам информацию об учетной записи через строки и поворачивается по номеру учетной записи. С этой целью мы можем определить второй CTE, а затем развернуться на этом.

WITH cte2 AS (
    SELECT DISTINCT CASE WHEN (LTRIM(RTRIM(ISM_HH_KEY)) <> '') 
         THEN LTRIM(RTRIM(ISM_HH_KEY)) 
         ELSE LEFT(LTRIM(RTRIM(WF_PM_ACCT_det_DB.ACCOUNT)), 6) 
        END AS 'HH', 
      account, 
      SUM(AvgAUA) AS 'Avg_AUA' 
    FROM CTE 
    LEFT JOIN wf_pm_acct_det_db 
     ON CTE.account = wf_pm_acct_det_db.Account 
    GROUP BY wf_pm_acct_det_db.ISM_HH_Key, 
      LEFT(LTRIM(RTRIM(WF_PM_ACCT_det_DB.ACCOUNT)), 6), 
      account 
) 

SELECT t.HH, 
     MAX(CASE WHEN t.account = 'Account 1' THEN t.Avg_AUA END) AS [Account 1], 
     MAX(CASE WHEN t.account = 'Account 2' THEN t.Avg_AUA END) AS [Account 2], 
     MAX(CASE WHEN t.account = 'Account 3' THEN t.Avg_AUA END) AS [Account 3], 
     MAX(CASE WHEN t.account = 'Account 4' THEN t.Avg_AUA END) AS [Account 4], 
     (SELECT SUM(Avg_AUA) FROM cte2 
     WHERE account IN ('Account 1', 'Account 2', 'Account 3', 'Account 4')) AS [Total] 
FROM cte2 t 
GROUP BY t.HH 
+0

Спасибо. Вы решили это для меня. –

0

Использование таблицы результатов, может поворачиваться с помощью следующего предложения:

declare @pv table (HouseID varchar(20), AccountNumber varchar(20), Balance decimal(18,4)); 

insert into @pv values 
('HHID','Account 1', 627.01), 
('HHID','Account 2', 829633.1317), 
('HHID','Account 3', 0), 
('HHID','Account 4', -771703.1858); 

select HouseID, Total, [Account 1], [Account 2], [Account 3], [Account 4] 
from 
(select HouseID, Total = SUM(Balance) over (partition by HouseID), 
     AccountNumber, Balance from @pv) st 
pivot 
(
    SUM(Balance) 
    FOR AccountNumber in ([Account 1], [Account 2], [Account 3], [Account 4]) 
) as PV; 

+---------+------------+-----------+-------------+-----------+--------------+ 
| HouseID | Total  | Account 1 | Account 2 | Account 3 | Account 4 | 
+---------+------------+-----------+-------------+-----------+--------------+ 
| HHID | 58556,9559 | 627,0100 | 829633,1317 | 0,0000 | -771703,1858 | 
+---------+------------+-----------+-------------+-----------+--------------+ 

Проверьте это: http://rextester.com/NURP25818

+0

@TimBiegeleisen отредактирован, спасибо. – McNets

Смежные вопросы