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 № 1Ceci 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