Project | Weeknb | Weekday | Test |
A | W1504 | 월 | 가 |
A | W1504 | 화 | 나 |
A | W1506 | 목 | 가 |
B | W1504 | 월 | 바 |
B | W1504 | 금 | 가 |
B | W1505 | 화 | 나 |
C | W1512 | 월 | 가 |
안녕하세요
이런 식으로 구성된 테이블이 있으면
| 2015-01-19 | 2015-01-20 | 2015-01-21 | 2015-01-22 | 2015-01-23 | 2015-01-24 | 2015-01-25 | 2015-01-26 | 2015-01-27 |
A | 가 | 나 |
|
|
|
|
|
|
|
B | 바 |
|
|
| 가 |
|
|
| 나 |
C |
|
|
|
|
|
|
|
|
|
이렇게 가로로 쭉 배열하고 싶은데 쿼리를 어떤 식으로 구성하면 좋을지요?
한 수 지도 부탁드립니다.
Comment 2
-
우선 날짜 테이블을 하나 만드세요.
create table dbo.calendar
( smalldate smalldatetime
, week_no tinyint
, week_day tinyint
, week_char nchar(1)
, weeknb char(5)
)
insert into dbo.calendarselect dateadd(day,rn,'2015-01-01') smalldate, datepart(week,dateadd(day,rn,'2015-01-01')) week_no, datepart(weekday,dateadd(day,rn,'2015-01-01')) week_day, case datepart(weekday,dateadd(day,rn,'2015-01-01'))when 1 then N'일'when 2 then N'월'when 3 then N'화'when 4 then N'수'when 5 then N'목'when 6 then N'금'when 7 then N'토'end week_char,'W15'+ right('0'+ rtrim(datepart(week,dateadd(day,rn,'2015-01-01'))),2) weeknbfrom (select top 365 row_number() over(order by (select 1)) - 1 rnfrom sys.all_objects) a;with test_data (project,weeknb,weekday,test) as (
select 'a','W1504',N'월',N'가' union all
select 'a','W1504',N'화',N'나' union all
select 'a','W1506',N'목',N'가' union all
select 'b','W1504',N'월',N'바' union all
select 'b','W1504',N'금',N'가' union all
select 'b','W1505',N'화',N'나' union all
select 'c','W1512',N'월',N'가'
)
select *
from (
select a.smalldate,b.project,b.test
from dbo.calendar a
left join test_data b
on b.weeknb = a.weeknb
and b.weekday = a.week_char
where a.week_no between 4 and 6
) x
pivot
( max(test)
for smalldate in ([2015-01-18],[2015-01-19],[2015-01-20],[2015-01-21],[2015-01-22],[2015-01-23],[2015-01-24],[2015-01-25],[2015-01-26],[2015-01-27],[2015-01-28],[2015-01-29],[2015-01-30],[2015-01-31],[2015-02-01],[2015-02-02],[2015-02-03],[2015-02-04],[2015-02-05],[2015-02-06],[2015-02-07])
) pv
where project is not null
게시판에서 피봇 or pivot 으로 검색하시면 다양한 예제를 보실 수 있으실꺼에요.......
그리고, 가로축이 항상 변한다면 동적쿼리를 피할 수 없을 듯 하네요,,,