复杂的SQL查询, 请高手指点
有如下表
灾害等级 面积
010 3.6
103 4.2
403 2.1
012 3.3
其中灾害等级三位 ,百位为 火灾等级 ,十位为虫害等级,个位为自然灾害等级
每种灾害有分为无,轻,中,强,剧烈;代码为别为0,1,2,3,4;如103 代表 火灾等级为轻(百位为1),虫害等级为无,自然灾害为强(个位为3)
我想获得如下表
灾害等级 火灾面积 虫害面积 自然灾害
轻 3.6 6.9 0
中 0 0 3.3
强 0 0 6.3
剧烈 2.1 0 0
测试表结构如下:
DECLARE @tb1 TABLE(灾害等级 nvarchar(10),面积 decimal(10,1))
INSERT @tb1 SELECT '010' , 3.6
UNION ALL SELECT '103' , 4.2
UNION ALL SELECT '403' , 2.1
UNION ALL SELECT '012' , 3.3
请高手指点,如能解决.立即结贴给分
------解决方案--------------------DECLARE @a TABLE(灾害等级 nvarchar(10),面积 decimal(10,1))
INSERT @a SELECT '010' , 3.6
UNION ALL SELECT '103' , 4.2
UNION ALL SELECT '403' , 2.1
UNION ALL SELECT '012' , 3.3
select '轻' 灾害等级,
火灾面积=isnull(sum(case when left(灾害等级,1)='1' then 面积 end),0),
虫害面积=isnull(sum(case when substring(灾害等级,2,1)='1' then 面积 end),0),
自然灾害=isnull(sum(case when right(灾害等级,1)='1' then 面积 end),0)
from @a
union all
select '中' 灾害等级,
火灾面积=isnull(sum(case when left(灾害等级,1)='2' then 面积 end),0),
虫害面积=isnull(sum(case when substring(灾害等级,2,1)='2' then 面积 end),0),
自然灾害=isnull(sum(case when right(灾害等级,1)='2' then 面积 end),0)
from @a
union all
select '强' 灾害等级,
火灾面积=isnull(sum(case when left(灾害等级,1)='3' then 面积 end),0),
虫害面积=isnull(sum(case when substring(灾害等级,2,1)='3' then 面积 end),0),
自然灾害=isnull(sum(case when right(灾害等级,1)='3' then 面积 end),0)
from @a
union all
select '剧烈' 灾害等级,
火灾面积=isnull(sum(case when left(灾害等级,1)='4' then 面积 end),0),
虫害面积=isnull(sum(case when substring(灾害等级,2,1)='4' then 面积 end),0),
自然灾害=isnull(sum(case when right(灾害等级,1)='4' then 面积 end),0)
from @a
--result
/*
灾害等级 火灾面积 虫害面积 自然灾害
---- ------------- -------------- -----------
轻 4.2 6.9 .0
中 .0 .0 3.3
强 .0 .0 6.3
剧烈 2.1 .0 .0
(所影响的行数为 4 行)
*/