2017-03-09 1 views
1

J'ai une table qui doit être transposée et une nouvelle colonne SUM a été ajoutée (DaySum). La transposition n'inclura pas toutes les lignes, mais seulement celles spécifiées (du 17-01-02 au 17-01-08) comme vous pouvez le voir ci-dessous dans le tableau des résultats.Pivot ou unpivot SQL Server

J'ai essayé différentes variantes de Pivot et Unpivot, mais j'ai mélangé les colonnes et les valeurs.

Voici le tableau que je suis en train de modifier:

Date   User1 User2 User3 
------------------------------------ 
17-01-01  1  0  1 
Week1   0  1  0 
17-01-02  1  0  1 
17-01-03  1  0  1 
17-01-04  1  1  1 
17-01-05  1  0  0 
17-01-06  1  0  0 
17-01-07  1  0  0 
17-01-08  1  1  0 
Week2   3  0  2 

Le résultat devrait ressembler à ceci:

Name 17-01-02 17-01-03 17-01-04 17-01-05 17-01-06 17-01-07 17-01-08 DaySum Week2 
------------------------------------------------------------------------------------------- 
User1  1   1   1   1   1   1   1  7  3 
User2  0   0   1   0   0   0   1  2  0 
User3  1   1   1   0   0   0   0  3  2 

J'apprécie grandement votre aide, je vous remercie à l'avance.

Répondre

1

Les deux.

Vous pouvez utiliser CROSS APPLY pour le pivotement et l'agrégation pour le pivotement.

Quelque chose comme ceci:

select 
    username, 
    sum(case when date = '2017-01-01' then val end) [2017-01-01], 
    sum(case when date = '2017-01-02' then val end) [2017-01-02], 
    sum(case when date = '2017-01-03' then val end) [2017-01-03], 
    sum(case when date = '2017-01-04' then val end) [2017-01-04], 
    . . . 
    sum(val) total 
from (
    select t.date, x.username, x.val 
    from your_table t 
    cross apply (
     values ('User1', User1), 
       ('User2', User2), 
       ('User3', User3) 
    ) x (username, val) 
) t 
group by username; 
+0

Merci GurV. Votre réponse a presque réussi à le résoudre. La colonne total somme toutes les valeurs, ce qui donne un total de 11 pour User1. Le total devrait être 7. –

+0

@OscarDuran - C'est parce qu'il ajoute aussi les données de la semaine. Vous pouvez l'ajuster pour adapter votre condition – GurV

+0

Je ne suis pas très expérimenté dans ce domaine, et j'ai essayé quelques variantes, mais je n'ai pas encore tout compris. Seriez-vous capable de poster ce qui manque pour que le bon total soit affiché? –