本文介绍了unpivot表列值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张桌子社区,它有一些价值,比如......



i have one table socitymain it''s some values like...

id  | socityname |  house |  population |  areaofsocity

1   |  abcd      |  10    |   150       |     10
2   |  cdf       |  5     |     15      |     20  
3   |  zxc       | 20     |   20        |     10   
4   |  bnm       | 98     |  10         |    30





i希望像这样在区域范围内重新调整..............



i want reslut in range of areawise like this..............

values     |  0to10 |   11to20 |  21to30  |  31up
socity     |   2    |     1    |    1     |
house      |  30    |   5      |   98     |
population |   170  |     15   |    10    |





我怎么能这样做...............



how i can do this...............

推荐答案

CREATE TABLE Aver(ques_id int,qtxt varchar(20),opid int,score int,performance varchar(30))

 insert into Aver values( 1,'gdggf',1,10,'Excellent'),( 2,'6t7ik,ikik',2,12,'Good'),(1,'gdggf',3,3,'Average'),(1,'gdggf',4,4,'Poor')


 select * from Aver
 declare @tab1e table(Id int,Qtxt varchar(20),Excellent int,Good int,Average int,Poor int)

 insert into @tab1e(ID)
 select distinct ques_id from Aver

update T set T.Qtxt=A.qtxt,T.Excellent=A.score from @tab1e T inner Join Aver A on A.ques_id=T.Id where A.performance='Excellent'
update T set T.Qtxt=A.qtxt,T.Good=A.score from @tab1e T inner Join Aver A on A.ques_id=T.Id where A.performance='Good'
update T set T.Qtxt=A.qtxt,T.Average=A.score from @tab1e T inner Join Aver A on A.ques_id=T.Id where A.performance='Average'
update T set T.Qtxt=A.qtxt,T.Poor=A.score from @tab1e T inner Join Aver A on A.ques_id=T.Id where A.performance='Poor'

select Id,Qtxt,case when Excellent is null then 0 else Excellent end 'Excellent',case when Good is null then 0 else Good end 'Good',
case when Average is null then 0 else Average end 'Average',case when Poor is null then 0 else Poor end 'Poor'from @tab1e


with a as
(
    select convert(varchar,areaofsocity-10) + '-' + convert(varchar,areaofsocity) as value,
    count(socityname) as socity,
    sum(house) as house,
    sum(population) as population
    from
    (
        select 1  id ,  'abcd'    socityname  ,  10  house  ,   150    population   ,     10 areaofsocity union all
        select 2   ,  'cdf'       ,  5     ,     15      ,     20   union all
        select 3   ,  'zxc'       , 20     ,   20        ,     10    union all
        select 4   ,  'bnm'       , 98     ,  10         ,    30
    ) as a
    group by areaofsocity
)

select 'socity' as value,sum([0-10])[0-10],sum([10-20]) [10-20],sum([20-30]) [20-30]
from a
PIVOT  (sum (socity) for value in ([0-10],[10-20],[20-30])) as a

union all

select 'house' as value,sum([0-10]) [0-10],sum([10-20]) [10-20],sum([20-30]) [20-30]
from a
PIVOT  (sum (house) for value in ([0-10],[10-20],[20-30])) as a

union all

select 'population' as value,sum([0-10]),sum([10-20]),sum([20-30])
from a
PIVOT  (sum (population) for value in ([0-10],[10-20],[20-30])) as a



快乐编码!

:)


Happy Coding!
:)


这篇关于unpivot表列值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-19 07:00