database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 3558 게시물 읽기
No. 3558
요일카운터
작성자
초보
작성일
2007-06-07 15:42
조회수
4,376

sql 초보입니다. mssql 2005를 사용하고 있습니다.
쿼리문 질문쫌 드릴께요

아이디  |  이름    |  생년월일
aaa      | 홍길동  | 1980-1-25
이라는 데이터가 있을때
출력에
그사람이 오늘까지 살아온 날중 토요일, 일요일, 총 살아온날을 출력하려고 합니다.

이름     |  생년월일    |  지난토요일  |   지난일요일  |  총 지난날
홍길동  | 1978-1-25   |  600             |     600           |   302800

처음 db를 접해서 어떻게 어떻게 방향을 잡아야 할지 몰라서 여쭤 봅니다.
답변부탁드립니다~

이 글에 대한 댓글이 총 2건 있습니다.

허접한 방법인데 제가 2000이라..
한 사람씩 조회한다면 아래 방법으로 해도 상관은 없을것 같은데 
많은 사람를 한꺼번에 보여 주는거라면 미리 달력 테이블을 만들어 놓고 
그 테이블을 가지고 조인걸어 하시는게 좋을듯합니다.  
 

create table t_yy
( yyyy char(4)
)
create table t_mm
( mm char(2)
)
create table t_dd
( dd char(2)
)
insert into t_yy values('1900')
insert into t_yy values('1901')
insert into t_yy values('1902')
insert into t_yy values('1903')
insert into t_yy values('1904')
insert into t_yy values('1905')
insert into t_yy values('1906')
insert into t_yy values('1907')
insert into t_yy values('1908')
insert into t_yy values('1909')
insert into t_yy values('1910')
insert into t_yy values('1911')
insert into t_yy values('1912')
insert into t_yy values('1913')
insert into t_yy values('1914')
insert into t_yy values('1915')
insert into t_yy values('1916')
insert into t_yy values('1917')
insert into t_yy values('1918')
insert into t_yy values('1919')
insert into t_yy values('1920')
insert into t_yy values('1921')
insert into t_yy values('1922')
insert into t_yy values('1923')
insert into t_yy values('1924')
insert into t_yy values('1925')
insert into t_yy values('1926')
insert into t_yy values('1927')
insert into t_yy values('1928')
insert into t_yy values('1929')
insert into t_yy values('1930')
insert into t_yy values('1931')
insert into t_yy values('1932')
insert into t_yy values('1933')
insert into t_yy values('1934')
insert into t_yy values('1935')
insert into t_yy values('1936')
insert into t_yy values('1937')
insert into t_yy values('1938')
insert into t_yy values('1939')
insert into t_yy values('1940')
insert into t_yy values('1941')
insert into t_yy values('1942')
insert into t_yy values('1943')
insert into t_yy values('1944')
insert into t_yy values('1945')
insert into t_yy values('1946')
insert into t_yy values('1947')
insert into t_yy values('1948')
insert into t_yy values('1949')
insert into t_yy values('1950')
insert into t_yy values('1951')
insert into t_yy values('1952')
insert into t_yy values('1953')
insert into t_yy values('1954')
insert into t_yy values('1955')
insert into t_yy values('1956')
insert into t_yy values('1957')
insert into t_yy values('1958')
insert into t_yy values('1959')
insert into t_yy values('1960')
insert into t_yy values('1961')
insert into t_yy values('1962')
insert into t_yy values('1963')
insert into t_yy values('1964')
insert into t_yy values('1965')
insert into t_yy values('1966')
insert into t_yy values('1967')
insert into t_yy values('1968')
insert into t_yy values('1969')
insert into t_yy values('1970')
insert into t_yy values('1971')
insert into t_yy values('1972')
insert into t_yy values('1973')
insert into t_yy values('1974')
insert into t_yy values('1975')
insert into t_yy values('1976')
insert into t_yy values('1977')
insert into t_yy values('1978')
insert into t_yy values('1979')
insert into t_yy values('1980')
insert into t_yy values('1981')
insert into t_yy values('1982')
insert into t_yy values('1983')
insert into t_yy values('1984')
insert into t_yy values('1985')
insert into t_yy values('1986')
insert into t_yy values('1987')
insert into t_yy values('1988')
insert into t_yy values('1989')
insert into t_yy values('1990')
insert into t_yy values('1991')
insert into t_yy values('1992')
insert into t_yy values('1993')
insert into t_yy values('1994')
insert into t_yy values('1995')
insert into t_yy values('1996')
insert into t_yy values('1997')
insert into t_yy values('1998')
insert into t_yy values('1999')
insert into t_yy values('2000')
insert into t_yy values('2001')
insert into t_yy values('2002')
insert into t_yy values('2003')
insert into t_yy values('2004')
insert into t_yy values('2005')
insert into t_yy values('2006')
insert into t_yy values('2007')
insert into t_yy values('2008')
insert into t_yy values('2009')
insert into t_yy values('2010')
insert into t_yy values('2011')
insert into t_yy values('2012')
insert into t_yy values('2013')
insert into t_yy values('2014')
insert into t_yy values('2015')
insert into t_yy values('2016')
insert into t_yy values('2017')
insert into t_yy values('2018')
insert into t_yy values('2019')
insert into t_yy values('2020')
insert into t_yy values('2021')
insert into t_yy values('2022')
insert into t_yy values('2023')
insert into t_yy values('2024')
insert into t_yy values('2025')
insert into t_yy values('2026')
insert into t_yy values('2027')
insert into t_yy values('2028')
insert into t_yy values('2029')
insert into t_yy values('2030')
insert into t_yy values('2031')
insert into t_yy values('2032')
insert into t_yy values('2033')
insert into t_yy values('2034')
insert into t_yy values('2035')
insert into t_yy values('2036')
insert into t_yy values('2037')
insert into t_yy values('2038')
insert into t_yy values('2039')
insert into t_yy values('2040')
insert into t_yy values('2041')
insert into t_yy values('2042')
insert into t_yy values('2043')
insert into t_yy values('2044')
insert into t_yy values('2045')
insert into t_yy values('2046')
insert into t_yy values('2047')
insert into t_yy values('2048')
insert into t_yy values('2049')

insert into t_mm values ('01')
insert into t_mm values ('02')
insert into t_mm values ('03')
insert into t_mm values ('04')
insert into t_mm values ('05')
insert into t_mm values ('06')
insert into t_mm values ('07')
insert into t_mm values ('08')
insert into t_mm values ('09')
insert into t_mm values ('10')
insert into t_mm values ('11')
insert into t_mm values ('12') 

insert into t_dd values ('01')
insert into t_dd values ('02')
insert into t_dd values ('03')
insert into t_dd values ('04')
insert into t_dd values ('05')
insert into t_dd values ('06')
insert into t_dd values ('07')
insert into t_dd values ('08')
insert into t_dd values ('09')
insert into t_dd values ('10')
insert into t_dd values ('11')
insert into t_dd values ('12')
insert into t_dd values ('13')
insert into t_dd values ('14')
insert into t_dd values ('15')
insert into t_dd values ('16')
insert into t_dd values ('17')
insert into t_dd values ('18')
insert into t_dd values ('19')
insert into t_dd values ('20')
insert into t_dd values ('21')
insert into t_dd values ('22')
insert into t_dd values ('23')
insert into t_dd values ('24')
insert into t_dd values ('25')
insert into t_dd values ('26')
insert into t_dd values ('27')
insert into t_dd values ('28')
insert into t_dd values ('29')
insert into t_dd values ('30')
insert into t_dd values ('31')
 
 select   sum(live_cnt),
             sum(sat_cnt),
             sum(sun_cnt ) 
   from  ( 
              select yyyy+'/'+mm+'/'+dd  tday , 1 live_cnt , 
              ( case when  DATEPART ( dw ,  yyyy+'/'+mm+'/'+dd    ) = 7 then 1 else 0 end ) sat_cnt,
              ( case when  DATEPART ( dw ,  yyyy+'/'+mm+'/'+dd    ) = 1 then 1 else 0 end ) sun_cnt
                 from t_yy, t_mm , t_dd
              where ISDATE (yyyy+'/'+mm+'/'+dd) = 1
                  and t_yy.yyyy between '1978' and '2007' 
              ) res
where res.tday between '1978/01/25' and '2007/06/02'

지나가다가님이 2007-06-07 17:45에 작성한 댓글입니다. Edit

추가 미리 달력 테이블을 만들고 

///////////////////////////////////////////////////////////////////////////////////////////////
create table cal_table

  cal_day char(10) not null ,
  day_nm int ,
  CONSTRAINT [PK_cal_table] PRIMARY KEY  CLUSTERED
 (
  [cal_day]
 ) WITH  FILLFACTOR = 90  ON [PRIMARY]
) ON [PRIMARY]

insert into cal_table
 select yyyy+'/'+mm+'/'+dd  tday ,   DATEPART ( dw ,  yyyy+'/'+mm+'/'+dd    )  
  from t_yy, t_mm , t_dd
  where ISDATE (yyyy+'/'+mm+'/'+dd) = 1
order by yyyy , mm , dd


select count(*) , 
          sum( ( case when  DATEPART ( dw ,  cal_day  ) = 7 then 1 else 0 end )) sat_cnt,
          sum( ( case when  DATEPART ( dw ,  cal_day  ) = 1 then 1 else 0 end ) )sun_cnt
  from cal_table
 where cal_day   between '1978/01/25' and '2007/06/02'
///////////////////////////////////////////////////////////////////////////////////////////////

 create table cust_main
(
  cust_nm varchar(20),
  cust_birth char(10)
 
)
 
insert into  cust_main values( '홍길동1','1978/01/25')
insert into  cust_main values( '홍길동2','1976/11/12')
insert into  cust_main values( '홍길동3','1987/06/05')

  
select a.cust_nm , a.cust_birth ,

          count(*) live_cnt,
          sum( ( case when  DATEPART ( dw ,  b.cal_day  ) = 7 then 1 else 0 end )) sat_cnt,
          sum( ( case when  DATEPART ( dw ,  b.cal_day  ) = 1 then 1 else 0 end ) )sun_cnt

  from cust_main  a,  cal_table b
where b.cal_day  between a.cust_birth    and '2007/06/02'
group by a.cust_nm , a.cust_birth
order by  a.cust_nm , a.cust_birth

지나가다가님이 2007-06-07 18:05에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3563문자열을 날자형과 비교하려고 하는데..... [3]
날샛다
2007-06-09
10266
3561쿼리해석.. [1]
초보
2007-06-08
2703
3559초보입니다~ [1]
왕초보
2007-06-07
2595
3558요일카운터 [2]
초보
2007-06-07
4376
3557Data를 sql문으로 받을 수있는지? [1]
나그네
2007-06-07
2541
3555초보입니다. 실시간으로 들어오는 자료를 두개의 서버에.. [2]
홍길동
2007-06-04
2828
3552스토어프로시저에서 like 문이 먹지 않네요^^ [2]
박준식
2007-06-01
3017
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다