首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL查询,求查询话语写法

2013-09-11 
SQL查询,求查询语句写法!现在数据表是这样的:单位代码——管护方式——相关林班号——面积120101——2——2——1120102

SQL查询,求查询语句写法!

现在数据表是这样的:
单位代码——管护方式——相关林班号——面积
120101——2——2——1
120102 ——1 ——1,3——2
120103—— 3——1,2,4——3
120102——1——2,3——4
120102—— 2 ——1,4——5
想要的查询结果是
林业局——林场——林班个数——方式1面积——方式2面积——方式3面积
01——01——1——null——1——null          
01——02——6——6——5——null
01——03——3——null——null——3
其中,林业局为单位代码3,4位,林场为5,6位,林班个数为明细中林班号的个数。求sql语句。
[解决办法]


create table u01
(单位代码 varchar(10), 管护方式 int, 相关林班号 varchar(10), 面积 int)

insert into u01
 select '120101', 2, '2', 1 union all
 select '120102', 1, '1,3', 2 union all
 select '120103', 3, '1,2,4', 3 union all
 select '120102', 1, '2,3', 4 union all
 select '120102', 2, '1,4', 5


select substring(a.单位代码,3,2) '林业局',
       substring(a.单位代码,5,2) '林场',
       (select count(1)
        from
        (select 相关林班号 from u01 b
         where substring(b.单位代码,3,2)=substring(a.单位代码,3,2)
         and substring(b.单位代码,5,2)=substring(a.单位代码,5,2)) c
        inner join master.dbo.spt_values d
        on d.type='P' and d.number between 1 and len(c.相关林班号)
        and substring(','+c.相关林班号,d.number,1)=',') '林班个数',
       (select sum(面积) from u01 b
         where substring(b.单位代码,3,2)=substring(a.单位代码,3,2)
         and substring(b.单位代码,5,2)=substring(a.单位代码,5,2)
         and b.管护方式=1) '方式1面积',
       (select sum(面积) from u01 b
         where substring(b.单位代码,3,2)=substring(a.单位代码,3,2)


         and substring(b.单位代码,5,2)=substring(a.单位代码,5,2)
         and b.管护方式=2) '方式2面积',
       (select sum(面积) from u01 b
         where substring(b.单位代码,3,2)=substring(a.单位代码,3,2)
         and substring(b.单位代码,5,2)=substring(a.单位代码,5,2)
         and b.管护方式=3) '方式3面积'
 from u01 a
 group by substring(a.单位代码,3,2),substring(a.单位代码,5,2)

/*
林业局  林场   林班个数        方式1面积       方式2面积       方式3面积
---- ---- ----------- ----------- ----------- -----------
01   01   1           NULL        1           NULL
01   02   6           6           5           NULL
01   03   3           NULL        NULL        3

(3 row(s) affected)
*/

热点排行