Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2008中的分解汇总表_Sql_Sql Server 2008_Summarization - Fatal编程技术网

SQL Server 2008中的分解汇总表

SQL Server 2008中的分解汇总表,sql,sql-server-2008,summarization,Sql,Sql Server 2008,Summarization,我收到了来自外部来源的数据,它是一种摘要格式。我需要一种方法将其分解,以适合我正在使用的系统 为了举例说明,假设我收到的数据如下所示: receivedTable: Age Gender Count 40 M 3 41 M 2 systemTable: ID Age Gender 1 40 M 2 40 M 3

我收到了来自外部来源的数据,它是一种摘要格式。我需要一种方法将其分解,以适合我正在使用的系统

为了举例说明,假设我收到的数据如下所示:

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 
我想这是一个像这样的分类格式:

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 
谢谢
卡尔

根据您的计数范围,您可以使用一个查找表,该表精确地保存每个整数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

从我的机器上的工作来看,这是一个递归查询,其中包含关于最大递归深度的所有常见警告

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

您无法获得行标识符,但将查询结果插入到具有标识列的表中可以解决这一问题。

Cool,integers table。这将非常有效。我的计数范围增加到数千,所以我想我需要一个脚本来自动生成表