2010-04-09 111 views
2

我收到了來自外部來源的數據,彙總格式爲。我需要一種分解方式來適應我所使用的系統。在SQL Server 2008中分解彙總表

爲了說明,假設我接收到的數據是這樣的:

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 

感謝
卡爾

回答

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 
+0

酷,整數表。這會很好地工作。我的計數範圍上升到了數千,所以我想我需要一個腳本來自動生成表格 – Karl 2010-04-09 10:18:24

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!! 

您沒有得到行標識符 - 但將查詢結果插入到具有標識列的表中會處理該問題。