/ / SQL reformater ligne à colonne - sql, reformat

Reformater SQL ligne à colonne - sql, reformat

Salut j'ai une table comme:

c1 c2 c3 c4 c5
v1 xx xx a  1
v1 xx xx b  2
v2 xx xx a  3
v3 xx xx a  2
v3 xx xx b  1

Je souhaite supprimer c4 et transférer c5 dans une colonne en fonction de la valeur de c4:

c1 c2 c3 c5_a c5_b
v1 xx xx  1     2
v2 xx xx  3     0
v3 xx xx  2     1

Comment est-ce que je fais ceci en SQL?

Réponses:

0 pour la réponse № 1

Ceci est un léger ajustement de la réponse de vkp, mais c’est un peu plus simple:

select c1, c2, c3,
max(case when c4 = "a" then c5 else 0 end) as c5_a,
max(case when c4 = "b" then c5 else 0 end) as c5_b
from t
group by c1, c2, c3;

En outre, il n'est pas clair si vous voulez max() ou sum().

Remarque: Cela suppose que le xx les valeurs sont les mêmes dans chaque ligne. Sinon, vous pourriez aussi avoir besoin de fonctions d'agrégation:

select c1, max(c2) as c2, max(c3) as c3,
max(case when c4 = "a" then c5 else 0 end) as c5_a,
max(case when c4 = "b" then c5 else 0 end) as c5_b
from t
group by c1;

1 pour la réponse № 2

Cela peut être fait avec une agrégation conditionnelle, en supposant que les colonnes de regroupement sont c1, c2, c3.

select c1,c2,c3,
coalesce(max(case when c4="a" then c5 end),0) as c5_a,
coalesce(max(case when c4="b" then c5 end),0) as c5_b
from t
group by c1,c2,c3