Table
date work time
2012-01-01 8
2012-01-02 3
2012-01-03 8
2012-01-05 4
2012-01-07 8
데이터가 이렇게 들어가 있는 테이블에서
2012-01-01 부터 2012-01-07까지의 일을 한 시간을 뽑아오는데.
2012-01-01 8
2012-01-02 3
2012-01-03 8
2012-01-04 0
2012-01-05 4
2012-01-06 0
2012-01-07 8
이렇게 없는 날짜에 대해서는 0 이 들어가게 쿼리문을 만들 수 없을지요?
Comment 3
-
메칸더
2013.07.15 11:28
-
김기찬
2013.11.05 16:05
두기간사이의 모든 날짜를 포함하는 테이블을 먼저 하나 만들고 위 테이블 date 칼럼과 LEFT 조인해서 NULL은 0으로 하면 됩니다.
DECLARE @TB TABLE (DATE DATETIME)DECLARE @S DATETIME
SET @S='2012/01/01'
DECLARE @E DATETIME
SET @E='2012/01/07'
WHILE (@S<=@E)
BEGIN
INSERT INTO @TB VALUES (@S)
SET @S= DATEADD(DD,1, @S)
ENDSELECT A.DATE, ISNULL(B.[WORK TIME], 0) FROM @TB A LEFT JOIN [테이블] B ON A.DATE = B.DATE
-
한태
2016.04.14 21:02
create table worktime(ymd datetime,worktime int)insert into worktime values('2016-01-01', 8),( '2016-01-02', 3),( '2016-01-03', 8),( '2016-01-05', 4),('2016-01-07', 8)--날짜테이블 생성create table smallymd(ymd datetimeCONSTRAINT smallymd_clus PRIMARY KEY Clustered (ymd) )declare @i datetimeset @i = '2016-01-01'while(@i <='2016-01-31')begininsert into smallymd values(@i)select @i=dateadd(d,1,@i)end--outer joinselect b.ymd, isnull(a.worktime,0) worktimefrom smallymd b left outer join worktime aon a.ymd=b.ymdwhere b.ymd<'2016-01-10'날짜테이블을 따로 만들어서 outer join하였습니다.
만약에 데이터가 NULL 허용이라서 없는날짜가 NULL이라면 ISNULL 함수를 써보세요.
SELECT ISNULL(컬럼명,0) AS 컬러명
FROM 테이블