Question

J'ai reçu des données à partir d'une source externe, qui est dans un format résumé. Je besoin d'un moyen de désagréger ce pour entrer dans un système que je me sers.

Pour illustrer, supposons que les données que je reçus ressemble à ceci:

receivedTable:

Age     Gender     Count
40      M          3
41      M          2

Je veux que c'est un format désagrégé comme ceci:

systemTable:

ID      Age        Gender
1       40         M          
2       40         M 
3       40         M 
4       41         M          
5       41         M 

Merci
Karl

Était-ce utile?

La solution

En fonction de la portée de votre compteur, vous pouvez utiliser une table de consultation qui contient exactement x enregistrements pour chaque x entier. Comme ceci:

create table counter(num int)
insert into counter select 1

insert into counter select 2
insert into counter select 2

insert into counter select 3
insert into counter select 3
insert into counter select 3

insert into counter select 4
insert into counter select 4
insert into counter select 4
insert into counter select 4

puis se joindre à ce tableau:

create table source(age int, gender char(1), num int)
insert into source select 40, 'm', 3
insert into source select 30, 'f', 2
insert into source select 20, 'm', 1

--insert into destination(age, gender)
    select age, gender
    from source
        inner join counter on counter.num = source.num

Autres conseils

De la « Travaux sur ma machine (TM) » stable une requête récursive, avec toutes les mises en garde habituelles sur la profondeur de récursivité maximale.

with Expanded(exAge, exGender, exRowIndex) as
(
    select
        Age as exAge, 
        Gender as exGender, 
        1 as exRowIndex
    from
        tblTest1
    union all
        select
            exAge,
            exGender,
            exRowIndex+1
        from
            tblTest1 t1 
            inner join
            Expanded e on (e.exAge = t1.Age and e.exGender = t1.Gender and e.exRowIndex < t1.Count)         
)
select
    exAge, 
    exGender, 
    exRowIndex
from
    Expanded
order by 
    exAge, 
    exGender, 
    exRowIndex
option (MAXRECURSION 0)  -- BE CAREFUL!!

Vous ne recevez pas l'identifiant de ligne - mais l'insertion du résultat de la requête dans une table avec une colonne d'identité réagiriez que

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top