我收到了来自外部来源的数据,这是一种汇总格式。我需要一种方法来分解这个以适应我正在使用的系统。
为了说明,假设我收到的数据如下所示:
receivedTable:
Age Gender Count
40 M 3
41 M 2
我希望这是一种像这样的分解格式:
systemTable:
ID Age Gender
1 40 M
2 40 M
3 40 M
4 41 M
5 41 M
感谢
卡尔
答案 0 :(得分:2)
从“我的机器上的工作(TM)”稳定一个递归查询,包含有关最大递归深度的所有常见警告。
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!!
您没有获得行标识符 - 但是将查询结果插入到具有标识列的表中将会处理该标识符。
答案 1 :(得分:1)
根据您的计数范围,您可以使用一个查找表,其中包含每个整数x的x个记录。像这样:
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
然后加入此表:
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