2017-09-25 6 views
0

24 시간 데이터가있는 테이블이 있습니다. 데이터를 피벗하고 카운트를 기준으로 순위를 지정하고 싶습니다.UNPIVIOT 및 RANK 데이터

create table #HourlyData_Counts 
(Hr_1 int,Hr_2 int ,Hr_3 int,Hr_4 int,Hr_5 int ,Hr_6 int ,Hr_7 int , Hr_8 int ,Hr_9 int , Hr_10 int) 

insert into #HourlyData_Counts 
values (55,89,78,77,67,99,45,33,23,91) 

select * from #HourlyData_Counts 

--drop table #HourlyData_Counts 

필요한 출력

enter image description here

+0

을 사용할 수 있습니다 ? –

답변

1

당신이 경우 피벗 해제를 사용해야합니다.

select Hours,counts,Ranks=Row_Number()over(order by counts) 
from 
(
    select * from #HourlyData_Counts 
) src 
UNPIVOT 
(
    counts For Hours in(Hr_1,Hr_2,Hr_3,Hr_4,Hr_5,Hr_6,Hr_7,Hr_8,Hr_9,Hr_10) 
) unpiv; 

enter image description here

0

이 같은 UNPIVOT을 찾고 있습니다 :

select 
    [Hours], 
    [counts], 
    rank() over (order by [counts] desc) 
from 
(
    select * from #HourlyData_Counts 
) as src 
unpivot 
(
    [counts] for [Hours] in (Hr_1, Hr_2, Hr_3, Hr_4, Hr_5, Hr_6, Hr_7, Hr_8, Hr_9, Hr_10) 
) as upvt 
order by try_cast(replace([Hours], 'Hr_', '') as int) 
0
CREATE TABLE #HourlyData_Counts 
(Hr_1 int,Hr_2 int ,Hr_3 int,Hr_4 int,Hr_5 int ,Hr_6 int ,Hr_7 int , Hr_8 int ,Hr_9 int , Hr_10 int) 

INSERT INTO #HourlyData_Counts 
VALUES (55,89,78,77,67,99,45,33,23,91) 

SELECT 
    [Hours] 
    , Counts 
    , RANK() OVER (ORDER BY Counts DESC) Ranks 
FROM 
    (
     SELECT Hr_1, Hr_2, Hr_3, Hr_4, Hr_5, Hr_6, Hr_7, Hr_8, Hr_9, Hr_10 
     FROM #HourlyData_Counts 
    ) P 
    UNPIVOT 
     (
      Counts FOR [Hours] IN 
      (Hr_1, Hr_2, Hr_3, Hr_4, Hr_5, Hr_6, Hr_7, Hr_8, Hr_9, Hr_10) 
     ) U 
ORDER BY CAST(REPLACE([Hours], 'Hr_', '') AS int) 

DROP TABLE #HourlyData_Counts 
0
IF OBJECT_ID('tempdb..#HourlyData_Counts') IS NOT NULL 
DROP TABLE #HourlyData_Counts 
create table #HourlyData_Counts 
(Hr_1 int,Hr_2 int ,Hr_3 int,Hr_4 int,Hr_5 int ,Hr_6 int ,Hr_7 int , Hr_8 int ,Hr_9 int , Hr_10 int) 

insert into #HourlyData_Counts 
values (55,89,78,77,67,99,45,33,23,91) 

select * from #HourlyData_Counts 


SELECT hours,hour1, RANK() OVER (order by hour1 desc) as RANK 
FROM 
(
    SELECT Hr_1, Hr_2, Hr_3, Hr_4, Hr_5, Hr_6, Hr_7, Hr_8, Hr_9, Hr_10 
      FROM #HourlyData_Counts 

) as s 
UNPIVOT 
(
    hour1 
    FOR hours IN 
(
Hr_1,Hr_2,Hr_3,Hr_4,Hr_5,Hr_6,Hr_7,Hr_8,Hr_9,Hr_10 
) 
)AS pvt 
order by hours 
0

당신은이에 대한 UNPIVOT을 사용할 수 있습니다, 그래서 당신의 쿼리가이

같이 갈까요 ,381,112,555,312,223,210

결과

Hr_6 99 1 
Hr_10 91 2 
Hr_2 89 3 
Hr_3 78 4 
Hr_4 77 5 
Hr_5 67 6 
Hr_1 55 7 
Hr_7 45 8 
Hr_8 33 9 
Hr_9 23 10 
0

열 및 열 이름의 수를 고정하는 경우 행, 왜 열의 값을 가하고 있습니다 데이터를 원하는 경우에, 당신은

;with r(hr, data_count) as (
    select 'hr_1', hr_1 from #HourlyData_Counts union all 
    select 'hr_2', hr_2 from #HourlyData_Counts union all 
    select 'hr_3', hr_3 from #HourlyData_Counts union all 
    select 'hr_4', hr_4 from #HourlyData_Counts union all 
    select 'hr_5', hr_5 from #HourlyData_Counts union all 
    select 'hr_6', hr_6 from #HourlyData_Counts union all 
    select 'hr_7', hr_7 from #HourlyData_Counts union all 
    select 'hr_8', hr_8 from #HourlyData_Counts union all 
    select 'hr_9', hr_9 from #HourlyData_Counts union all 
    select 'hr_10', hr_10 from #HourlyData_Counts 
) 
select hr, data_count, data_rank = ROW_NUMBER() over(order by data_count asc) 
    from r 
order by data_count