J'ai un tableau avec la structure ci-dessous, je dois décompresser la sortie pour obtenir une ligne par Résultat attendu: Plus tard, je devrai également filtrer pour n'obtenir que les lignes contenant notes 1 et 2 . La sortie doit donc être Je suis en mesure d'obtenir les deux premières colonnes SORTIE: Quelqu'un pourrait-il me dire comment obtenir le ID par PARAMETER et ses RATINGS code> ID PARAMETERS
1000 PARAMETER1
1000 PARAMETER2
1000 PARAMETER3
1000 PARAMETER4
1002 PARAMETER1
1002 PARAMETER2
1002 PARAMETER3
1002 PARAMETER4
1007 PARAMETER1
1007 PARAMETER2
1007 PARAMETER3
1007 PARAMETER4
1015 PARAMETER1
1015 PARAMETER2
1015 PARAMETER3
1015 PARAMETER4
1019 PARAMETER1
1019 PARAMETER2
1019 PARAMETER3
1019 PARAMETER4
select ID,[parameters] from RATINGS
unpivot
(
[value] for [PARAMETERS] in (PARAMETER1,PARAMETER2,PARAMETER3,PARAMETER4)
) unpvt
ID PARAMETERS RATING
1000 PARAMETER1 1
1000 PARAMETER3 2
1000 PARAMETER4 1
1002 PARAMETER1 2
1002 PARAMETER4 2
1007 PARAMETER3 2
1007 PARAMETER4 1
1015 PARAMETER1 1
1015 PARAMETER3 1
1019 PARAMETER1 2
1019 PARAMETER1 1
1019 PARAMETER1 1
ID et PARAMETERS en utilisant la requête ci-dessous : ID PARAMETERS RATING
1000 PARAMETER1 1
1000 PARAMETER2 3
1000 PARAMETER3 2
1000 PARAMETER4 1
1002 PARAMETER1 2
1002 PARAMETER2 3
1002 PARAMETER3 3
1002 PARAMETER4 2
1007 PARAMETER1 3
1007 PARAMETER2 3
1007 PARAMETER3 2
1007 PARAMETER4 1
1015 PARAMETER1 1
1015 PARAMETER2 3
1015 PARAMETER3 1
1015 PARAMETER4 3
1019 PARAMETER1 3
1019 PARAMETER1 2
1019 PARAMETER1 1
1019 PARAMETER1 1
create table RATINGS(ID INT,PARAMETER1 INT,PARAMETER2 INT,PARAMETER3 INT,PARAMETER4 INT)
insert into RATINGS values(1000,1,3,2,1)
insert into RATINGS values(1002,2,3,3,2)
insert into RATINGS values(1007,3,3,2,1)
insert into RATINGS values(1015,1,3,1,3)
insert into RATINGS values(1019,3,2,1,1)
Rating code > colonne?
3 Réponses :
Ajoutez simplement la colonne de valeur:
select ID,[parameters], [rating] = value from RATINGS unpivot ( [value] for [PARAMETERS] in (PARAMETER1,PARAMETER2,PARAMETER3,PARAMETER4) ) unpvt where value in (1,2);
Vous pouvez annuler le pivot avec UNION
with parmratings as (
select id, 'PARAMETERS1' as parameters, parameter1 as rating
from ratings
union
select id, 'PARAMETERS2' . . .
)
select * from parmratings where rating < 3
http : //www.sqlfiddle.com/#! 9 / 421f05 / 7
Puis la deuxième partie juste
select id, 'PARAMETERS1' as parameters, parameter1 as rating from ratings union select id, 'PARAMETERS2' as parameters, parameter2 as rating from ratings union select id, 'PARAMETERS3' as parameters, parameter3 as rating from ratings union select id, 'PARAMETERS4' as parameters, parameter4 as rating from ratings order by id, parameters
J'utiliserais CROSS APPLY :
SELECT r.id, rr.PARAMETERS, rr.RATING
FROM ratings r CROSS APPLY
( VALUES ([PARAMETERS1], 'PARAMETERS1'), . . . ) rr(RATING, PARAMETERS)
ORDER BY r.id;