disaggregieren zusammengefasst Tabelle in SQL Server 2008
-
25-09-2019 - |
Frage
Ich habe Daten von einer externen Quelle empfängt, die in Form einer Zusammenfassung ist. Ich brauche einen Weg, dies zu zerlegen in ein System passen Ich verwende.
Zur Veranschaulichung, die Daten nehme an, ich erhielt sieht wie folgt aus:
receivedTable:
Age Gender Count
40 M 3
41 M 2
Ich möchte das ist ein aufgeschlüsselten Format wie folgt aus:
systemTable:
ID Age Gender
1 40 M
2 40 M
3 40 M
4 41 M
5 41 M
Danke
Karl
Lösung
In Abhängigkeit von dem Bereich Ihrer Zählung Sie eine Lookup-Tabelle verwenden könnte, die genau x Datensätze für jede ganze Zahl x hält. Wie folgt aus:
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
dann mit dieser Tabelle verbinden:
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
Andere Tipps
Von den „Arbeiten auf meinem Rechner (TM)“ stabil eine rekursive Abfrage, mit allen üblichen Warnungen über maximale Rekursionstiefe.
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!!
Sie haben keine Zeilenbezeichner bekommen -. Aber mit einer Identitätsspalte mit dem würde behandeln das Ergebnis der Abfrage in eine Tabelle einfügen