数据库是这样的:
编号 姓名 性别 出生年月 生份证号 电号 手机号 户口类型 是否是低保 住址
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位数.
编号 姓名 性别 出生年月 生份证号 电号 手机号 户口类型 是否是低保 住址
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位数.
select substring(编号,1,6)) as 单位编号 ,
(select count(substring(编号,1,6)) from 表 ) as 人数,
(select count(是否是低保) from 表 group by substring(编号,1,6) having
是否是低保='是' ) as 有低保人数,.....
单位名称 = 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)
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)
谢谢邹建,我这样改了一下,