2

J'essaie de faire pivoter la table à l'image suivante, mais j'échoué, le résultat final i besoin est le suivant enter image description hereComment peut-on faire pivoter la requête de la manière suivante dans l'image

et la requête i utilisé est

SELECT COUNT(T.TTOutID) AS Currenct, TTOutTargetTrxnCount AS Targets, 
B.BranchCode , 
ROW_NUMBER() OVER (Order BY COUNT(T.TTOutID) DESC) AS RANK, 
CAST((CAST (COUNT(T.TTOutID) AS DECIMAL)/CAST (TTOutTargetTrxnCount AS decimal))*100 AS decimal (4,2)) AS Percentages , 
TTOutTargetTrxnCount-COUNT(T.TTOutID) as Difference 
FROM ALX_SalesTargets S 
LEFT JOIN ALX_TTOut T ON S.BranchID=T.BranchID 
LEFT JOIN ALX_Branches B ON S.BranchID=B.BranchID 
Group BY S.TTOutTargetTrxnCount,B.BranchCode 

et je fais une table tmp aide

CREATE TABLE #Tempsample 
(
    currenct int , 
    targets bigint, 
    branchcode nvarchar(128), 
    rank int, 
    percentage decimal, 
    difference int 
); 


INSERT INTO #Tempsample 
    (currenct, targets,branchcode,rank,percentage,difference) 
VALUES 
    ('131', '2650','EXB', '1','4.94', '2519'), 
    ('25', '3500','MHQ', '2','0.71', '3475'), 
    ('3', '850','MNM', '3','0.35', '847') 

Répondre

1

utilisant cross apply(values ...) pour UNPIVOT vos données et l'agrégation conditionnelle de re-pivoter vos données:

select 
    u.Attribute 
    , EXB = max(case when branchcode = 'EXB' then value end) 
    , MHQ = max(case when branchcode = 'MHQ' then value end) 
    , MNM = max(case when branchcode = 'MNM' then value end) 
    , Totals = sum(case when u.Attribute = 'rank' then null else value end) 
from #tempsample t 
    cross apply (values 
     ('currenct',currenct) 
    , ('targets',targets) 
    , ('difference',difference) 
    , ('rank',rank) 
    ) u (attribute,value) 
group by u.Attribute 
order by (case when u.Attribute='rank' then 1 else 0 end) 

rextester Démo: http://rextester.com/WLES86332

retours:

+------------+------+------+-----+--------+ 
| Attribute | EXB | MHQ | MNM | Totals | 
+------------+------+------+-----+--------+ 
| currenct | 131 | 25 | 3 | 159 | 
| difference | 2519 | 3475 | 847 | 6841 | 
| targets | 2650 | 3500 | 850 | 7000 | 
| rank  | 1 | 2 | 3 | NULL | 
+------------+------+------+-----+--------+ 
1

Vous pouvez pivoter comme ceci:

select 'Targets' as [Header], * from (
    select targets, branchcode from #Tempsample) a 
    pivot (sum(targets) for branchcode in ([EXB], [MHQ], [MNM])) p 
union all 
select 'Current' as [Header],* from (
    select currenct, branchcode from #Tempsample) a 
    pivot (sum(currenct) for branchcode in ([EXB], [MHQ], [MNM])) p 
union all 
select 'Difference' as [Header], * from (
    select difference, branchcode from #Tempsample) a 
    pivot (sum(difference) for branchcode in ([EXB], [MHQ], [MNM])) p 
union all 
select 'Rank' as [Header], * from (
    select Rank, branchcode from #Tempsample) a 
    pivot (MAX(rank) for branchcode in ([EXB], [MHQ], [MNM])) p 
+0

il est bon, mais , le code de branche est plus de 20 ajouté dynamiquement comment pouvons-nous faire avec ce code. la longueur et le plan d'exécution est plus –