代码之家  ›  专栏  ›  技术社区  ›  Karl

在SQLServer2008中分解摘要表

  •  2
  • Karl  · 技术社区  · 16 年前

    我从一个外部来源收到数据,它是一个摘要格式。我需要一种方法来分解这一点,以适应我正在使用的系统。

    举例来说,假设我收到的数据如下:

    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 
    

    谢谢

    2 回复  |  直到 16 年前
        1
  •  2
  •   edosoft    16 年前

    根据计数的范围,您可以使用一个查找表,该表为每个整数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
  •  2
  •   Neil Moss    16 年前

    从“worksonmymachine(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!!