【问题标题】:disaggregate summarised table in SQL Server 2008在 SQL Server 2008 中分解汇总表
【发布时间】:2010-04-09 09:42:01
【问题描述】:

我从外部来源收到了汇总格式的数据。我需要一种方法来分解它以适应我正在使用的系统。

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

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 

谢谢
卡尔

【问题讨论】:

    标签: sql sql-server-2008 summarization


    【解决方案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
    

    【讨论】:

    • 酷,整数表。这将完美地工作。我的计数范围上升到数千,所以我想我需要一个脚本来自动生成表格
    【解决方案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!!
    

    您没有获得行标识符 - 但将查询结果插入到具有标识列的表中就可以解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      相关资源
      最近更新 更多