现在通过查询得出了下面这一张表:
季度 区县 街道 户型 房屋数量
1 朝阳区 东湖 两室一厅 1
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 西四 两室一厅 1
2 东城区 东四 一室一厅 1
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 西单 一室一厅 1
3 东城区 东单 一室一厅 1
3 东城区 万泉庄 一室一厅 1
但是要求得到的表格确实下面这样的
季度 区县 街道 户型 房屋数量
1 合计 8
1 朝阳区 小计 1
1 朝阳区 东湖 两室一厅 1
1 海淀区 小计 6
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 小计 1
1 西城区 西四 两室一厅 1
2 合计 4
2 东城区 小计 1
2 东城区 东四 一室一厅 1
2 海淀区 小计 2
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 小计 1
2 西城区 西单 一室一厅 1
3 合计 2
3 东城区 小计 1
3 东城区 东单 一室一厅 1
3 东城区 小计 1
3 东城区 万泉庄 一室一厅 1
多了两个要求,一个是按季度统计出所有出租房屋的数量,以及按季度按区县统计所有出租房屋数量,简单地说就是如何在第一张表的基础上如何变为第二章的效果?

解决方案 »

  1.   

    如何用SQL语句完成第二张表的统计效果?
      

  2.   

    就是各种group by 再各种union all
      

  3.   

    你这个要么做个Excel,或者用UNION挨个统计吧
      

  4.   

    打个比方,我用union直接插入第一季度的合计情况,如下图但是我如何放到第一行呢?
      

  5.   

    请参考:
    if object_id('test') is not null
    drop table test
    go
    create table test(单位 varchar(10),月份 int, 数据1 decimal(8,2),
     数据2 decimal(8,2), 数据3 decimal(8,2), 数据4 decimal(8,2))
    insert into test
    select '公司1' ,1, 3.30 , 9.00 , 2.00 , 2.00 union
    select '公司2', 1, 4.20,  9.60 , 2.10,  2.00 union
    select '公司3', 1 ,1.00 , 9.00,  6.50 , 2.00 union
    select '公司1', 2, 3.00 , 2.00 , 2.00 , 7.80 union
    select '公司2', 3 ,4.20,  9.60 , 2.10 , 2.00 
    select isnull(单位,'平均值') as 单位,avg(数据1),avg(数据2),avg(数据3),avg(数据4) from test where 月份=1 
    group by  单位  with rollup 
    /*
    单位                                                                                                                                 
    ---------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    公司1        3.300000                                9.000000                                2.000000                                2.000000
    公司2        4.200000                                9.600000                                2.100000                                2.000000
    公司3        1.000000                                9.000000                                6.500000                                2.000000
    平均值        2.833333                                9.200000                                3.533333                                2.000000(4 row(s) affected)
    */
    select 单位,数据1,数据2,数据3,数据4 from test where 月份=1
    union all
    select isnull('平均','')单位,avg(数据1)数据1,avg(数据2)数据2,avg(数据3)数据3,avg(数据4)数据4 from test where 月份=1 
      

  6.   

    兄弟,能给个代码吗,我用union插入时,显示的行数不能够出现在我要的位置啊
      

  7.   


    select 1 季度, N'朝阳区' 区县,N'东湖' 街道,N'两室一厅' 户型,1 房屋数量
    into #t
    union all select 1, N'海淀区' ,N'苏州街' ,N'两室一厅' ,3
    union all select 1, N'海淀区' ,N'苏州街' ,N'一室一厅' ,1
    union all select 1, N'海淀区' ,N'万泉庄' ,N'两室一厅' ,1
    union all select 1, N'海淀区' ,N'中关村',N'一室一厅' ,1
    union all select 1, N'西城区' ,N'西四' ,N'两室一厅' ,1
    union all select 2, N'东城区' ,N'东四' ,N'一室一厅' ,1
    union all select 2, N'海淀区' ,N'万泉庄',N'一室一厅' ,1
    union all select 2, N'海淀区' ,N'中关村',N'一室一厅' ,1
    union all select 2, N'西城区' ,N'西单', N'一室一厅' ,1
    union all select 3, N'东城区' ,N'东单' ,N'一室一厅' ,1
    union all select 3, N'东城区' ,N'万泉庄', N'一室一厅', 1
    select [季度],isnull([区县],N'合计') [区县]
    ,case when [区县] is null then '' else isnull([户型],N'小计') end [户型],sum(房屋数量) as [房屋数量]
    from #t
    group by rollup([季度],[区县],[户型])
      

  8.   


    create table nd
    (季度 int, 区县 varchar(10), 街道 varchar(10), 户型 varchar(20), 房屋数量 int)insert into nd
     select 1, '朝阳区', '东湖', '两室一厅', 1 union all
     select 1, '海淀区', '苏州街', '两室一厅', 3 union all
     select 1, '海淀区', '苏州街', '一室一厅', 1 union all
     select 1, '海淀区', '万泉庄', '两室一厅', 1 union all 
     select 1, '海淀区', '中关村', '一室一厅', 1 union all
     select 1, '西城区', '西四', '两室一厅 ', 1 union all
     select 2, '东城区', '东四', '一室一厅', 1 union all
     select 2, '海淀区', '万泉庄', '一室一厅', 1 union all
     select 2, '海淀区', '中关村', '一室一厅', 1 union all
     select 2, '西城区', '西单', '一室一厅', 1 union all
     select 3, '东城区', '东单', '一室一厅', 1 union all
     select 3, '东城区', '万泉庄', '一室一厅', 1
    select *
    from
    (select 季度 '季度',
            isnull(区县,'合计') '区县',
            case when 区县 is not null then '小计' else '' end '街道',
            '' '户型',
            sum(房屋数量) '房屋数量'
      from nd group by 季度,区县 with rollup having grouping(季度)=0
     union all
     select 季度,区县,街道,户型,房屋数量 from nd
    ) t 
    order by 季度,
    case when 区县='合计' then '' else 区县 end,
    case when 街道='' then 1
         when 街道='小计' then 2 
         else 3 end/*
    季度          区县         街道         户型                   房屋数量
    ----------- ---------- ---------- -------------------- -----------
    1           合计                                         8
    1           朝阳区        小计                              1
    1           朝阳区        东湖         两室一厅                 1
    1           海淀区        小计                              6
    1           海淀区        苏州街        两室一厅                 3
    1           海淀区        苏州街        一室一厅                 1
    1           海淀区        万泉庄        两室一厅                 1
    1           海淀区        中关村        一室一厅                 1
    1           西城区        小计                              1
    1           西城区        西四         两室一厅                 1
    2           合计                                         4
    2           东城区        小计                              1
    2           东城区        东四         一室一厅                 1
    2           海淀区        小计                              2
    2           海淀区        万泉庄        一室一厅                 1
    2           海淀区        中关村        一室一厅                 1
    2           西城区        小计                              1
    2           西城区        西单         一室一厅                 1
    3           合计                                         2
    3           东城区        小计                              2
    3           东城区        东单         一室一厅                 1
    3           东城区        万泉庄        一室一厅                 1(22 row(s) affected)
    */
      

  9.   

    可是with rollup having grouping(季度)=0这句话还是不能理解