0
votes

SQL pivoter plusieurs colonnes

im en utilisant des SSMS et j'ai une table qui ressemble à ceci;

ID   / Requirement  / Requirement Status /  Comments
  1  /    Req 1    /   Yes              /
  1  /    Req 2   /    no               / Needs Work


1 commentaires

Pourrait être fait en utilisant Union tout .


3 Réponses :


2
votes

Qu'est-ce qui vous arrête d'utiliser Union of 25 SELECT?

select ID, 'Req 1' as Requirement, Req1 as RequirementStatus, Req1Comment as Comments from t
union all
select ID, 'Req 2' as Requirement, req2 as RequirementStatus, req2Comment as Comments from t
union all
...
select ID, 'Req 25' as Requirement, req25 as RequirementStatus, req25Comment as Comments from t


1 commentaires

Merci! J'ai appliqué cela et quelques minutes de travail La vue a été créée et le rapport est prêt à construire!



0
votes
declare @t table
(
id int identity,
Req1 varchar(10),
Req1Comment varchar(20),
Req2 varchar(10),
Req2Comment varchar(20)
)

insert into @t (Req1, Req1Comment, Req2, req2Comment)
values
('yes', null, 'no', 'needs work'),
('no', 'not working', 'yes', '');


select id, 'Req 1' as Requirement, Req1 as [Requirement Status], Req1Comment as Comments
from @t
union all
select id, 'Req 2', Req2, Req2Comment
from @t;

select id, concat('Req ', v.val) as Requirement, case v.val when 1 then Req1 else Req2 end as [Requirement Status], case v.val when 1 then Req1Comment else Req2Comment end as Comments
from @t as t
cross apply (values(1), (2)) as v(val);

select id, concat('Req ', v.val) as Requirement, 
    choose(v.val, Req1, Req2) as [Requirement Status], 
    choose(v.val, Req1Comment, Req2Comment) as Comments
from @t as t
cross apply (values(1), (2)) as v(val);

0 commentaires

2
votes

Je suggérerais d'utiliser cross appliquer : xxx

si vous ne voulez pas taper 25 lignes pour valeurs , vous peut utiliser une feuille de calcul pour générer le code.


0 commentaires