数据库是这样的:
  编号       姓名  性别    出生年月       生份证号            电号        手机号    户口类型  是否是低保   住址
2009020001 李基  男  2009年2月1日  422220219850615523 87753907 15972953580 非农      不是      院外        
2009030002 李建工 男  2009年2月1日  422220219850615523 87753907 15972953580  农        是      院内
现在下面一个统计的报表,不知道怎么写sql语句单位名称 人数小计 户口类型(人) 享受低保情况  居住状况
农 非农 无低保人数 有低保人数 院内 院外

  200902  2      1       1          2              0              1       1
  200903  3      2       1          2              1              1       2注:单位名称就是上面编号的前6位数.

解决方案 »

  1.   

    group by cast(编号 as char(6))
      

  2.   


    select substring(编号,1,6)) as 单位编号 ,
                           (select count(substring(编号,1,6))  from 表 ) as 人数,
                           (select count(是否是低保) from 表 group by substring(编号,1,6) having  
                                                              是否是低保='是'  ) as 有低保人数,.....
      

  3.   

    SELECT
    单位名称 = LEFT(编号, 6),
    人数小计 = COUNT(*),
    [户口类型(人) - 农] = SUM(CASE 户口类型 WHEN N'农' THEN 1 ELSE 0 END),
    [户口类型(人) - 非农] = SUM(CASE 户口类型 WHEN N'非农' THEN 1 ELSE 0 END),
    [享受低保情况 - 无低保人数] = SUM(CASE 是否是低保 WHEN N'不是' THEN 1 ELSE 0 END),
    [享受低保情况 - 有低保人数] = SUM(CASE 是否是低保 WHEN N'是' THEN 1 ELSE 0 END),
    [居住状况 - 院内] = SUM(CASE 住址 WHEN N'院内' THEN 1 ELSE 0 END),
    [居住状况 - 院外] = SUM(CASE 住址 WHEN N'院外' THEN 1 ELSE 0 END)
    FROM tb
    GROUP BY LEFT(编号, 6)
      

  4.   

    select 
    LEFT(MFCode, 6) as '单位名称',
    COUNT(*) as '人数小计' ,
        SUM(CASE WHEN HKLX='农' THEN 1 ELSE 0 END) as '户口类型(人) - 农',
    SUM(CASE WHEN HKLX='非农' THEN 1 ELSE 0 END) as '户口类型(人) - 非农',
    SUM(CASE  WHEN DB='无' THEN 1 ELSE 0 END) as '享受低保情况 - 无低保人数',
    SUM(CASE  WHEN DB<>'无' THEN 1 ELSE 0 END) as '享受低保情况 - 有低保人数',
    SUM(CASE  WHEN Address='院内' THEN 1 ELSE 0 END) as '居住状况 - 院内',
    SUM(CASE  WHEN Address<>'院内' THEN 1 ELSE 0 END) as '居住状况 - 院外'
    from T_MFPerson
    GROUP BY LEFT(MFCode, 6)
    谢谢邹建,我这样改了一下,