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 5717 게시물 읽기
No. 5717
매번 죽을상으로 덤벼드네요ㅠㅠ 한번보시고 도움부탁드리겠습니다
작성자
정재원(haru0)
작성일
2010-07-29 09:37ⓒ
2010-07-29 09:43ⓜ
조회수
8,148

DECLARE @ORGID VARCHAR(50),
  @WDATE1 VARCHAR(50),
  @WDATE2 VARCHAR(50)

SET @ORGID = 'E0583'
SET @WDATE1 = '20100721'
SET @WDATE2 = '20100728'


SELECT DISTINCT A.ORGNAME AS 학교명,
  A.STARTDATE AS 서비스시작일,
  (SELECT COUNT(*) FROM TB_MEMBER WITH(INDEX(IX_TB_MEMBER_ORGID))
   WHERE ORGID  = A.ORGID AND SVCSTAT_CD IN(1)) AS 전체사용자,
  
  (SELECT COUNT(*) FROM TB_ATTEND WITH(INDEX(IX_TB_ATTEND))
    WHERE ORGID = A.ORGID AND ATNDIDX = 'A'
    AND DATENAME(HOUR,TAGTIME) BETWEEN 06 AND  10
    AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),GETDATE(),112)) AS 출석자,

  LEFT(CONVERT(float,(SELECT COUNT(*) FROM TB_ATTEND WITH(INDEX(IX_TB_ATTEND))
    WHERE ORGID = A.ORGID AND ATNDIDX = 'A'
    AND DATENAME(HOUR,TAGTIME) BETWEEN 06 AND  10
    AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),GETDATE(),112)) * 100 /  CONVERT(float,(SELECT COUNT(*) FROM TB_MEMBER WITH(INDEX(IX_TB_MEMBER_ORGID))
   WHERE ORGID  = A.ORGID AND SVCSTAT_CD IN(1)))),4) as 출석률, CONVERT(CHAR(8),B.WDATE,112) AS 날짜  
  FROM TB_ORGAN A
 JOIN  ANYCARE.dbo.TB_ATTEND_201007 B
  ON LEFT(B.ORGID,5) + '000' = A.ORGMEM
 WHERE CONVERT(CHAR(8),B.WDATE,112) between @WDATE1 AND @WDATE2
   AND A.ORGID = @ORGID

날자를 넣어서 출석률을 각 날짜마다 검색하고싶은데 쉽지가 않네요

날짜를 비트윈을 하니 날자만 몇일~몇일까지만 나오지 각 그 몇일에 해당하는 출석률이라든지 출석자가 나오지않네요;;

위의 쿼리문장의 결과는

 

 

 학교명--서비스시작일--전체사용자--출석자--출석률--날짜

대구동도초등학교 --20100703 --156-- 9 --5.76 --20100723
대구동도초등학교 --20100703 --156 --9 --5.76 --20100722
대구동도초등학교 --20100703 --156 --9 --5.76 --20100726
대구동도초등학교 --20100703 --156 --9 --5.76 --20100727
대구동도초등학교 --20100703 --156 --9 --5.76-- 20100728
대구동도초등학교 --20100703 --156 --9 --5.76-- 20100721

다 다른날자에 값인데 출석률이라든지 출석자가 너무 같게나오네요;
 

처음 SELECT 시작할때 DISTINCT 을 사용해서 나중에 날짜를 정렬이 안되네요 ORDER BY CONVERT(CHAR(8),A.WDATE,112) DESC

날자를 낮은순으로 정렬을 해야하는데 어렵네요 쿼리 ㅠㅠ

 


 

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

출석자를 조회할때 getdate()를 써서 오늘날자에 출석자를 가져오니

모두 9만 나오는것 같네요..

AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),GETDATE(),112)) AS 출석자,

-->

AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),A.WDATE,112)) AS 출석자,

로 바꿔주시고 출석률부분에

AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),GETDATE(),112)) * 100 / 

-->

AND CONVERT(CHAR(8),WDATE,112) = CONVERT(CHAR(8),A.WDATE,112)) * 100 / 

이렇게 바꿔주시면 될듯 싶네요.

 

정렬은 DESC만 뺴면 될듯..

agoodman99님이 2010-07-29 09:52에 작성한 댓글입니다.
이 댓글은 2010-07-29 10:02에 마지막으로 수정되었습니다. Edit

매번 도움을 주셔서 정말감사합니다

말씀해주신데로 getdate()부분에 A.WDATE를 바꿔서 넣엇지만

 

출석자가 0이 나와버리네요 그래서 출석률도 0이나오고 ;

ORDER BY CONVERT(CHAR(8),A.WDATE,112)

DESC를 뺴고도 오류값이나오네요 ㅠㅠ

메시지 145, 수준 15, 상태 1, 줄 13
SELECT DISTINCT가 지정된 경우에는 ORDER BY 항목이 SELECT 목록에 나타나야 합니다.
 

 그래서 AND CONVERT(CHAR(8),A.WDATE,112) = CONVERT(CHAR(8),A.WDATE,112)) AS 출석자,

ㅠㅠ 안되더라구요 GETDATE()랑 같은값..ㅠ.ㅠ

정재원(haru0)님이 2010-07-29 11:57에 작성한 댓글입니다.
이 댓글은 2010-07-29 12:01에 마지막으로 수정되었습니다.

문제자체는 그리 어려워 보이지 않은데 쿼리를 실행시켜보질 못하니 계속 똑같은 실수를 하네요..

A.WDATE 가 아니고 B.WDATE 네요

날짜가 B.WDATE인데 바보같이 A.WDATE라고 했네요 ㅠㅠ

그리고 distinct를 썼다고 정렬이 안된다는건 말이 안되네요..

날짜라는 별칭을 줬으니 order by 날짜 이렇게 해보세요..

agoodman99님이 2010-07-29 15:24에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5721여러개의 Row값을 하나의 Row에 나오게 하는방법 [3]
자바천재
2010-07-30
7744
5720MS SQL 2008 (Enterprise) 감사(audit) 로그 검색 방법이 궁금합니다.
이열
2010-07-29
7175
5718안녕하세요.. DB를 배우기 시작한지 4주된 늅입니다.. [1]
김광선
2010-07-29
6452
5717매번 죽을상으로 덤벼드네요ㅠㅠ 한번보시고 도움부탁드리겠습니다 [3]
정재원
2010-07-29
8148
5716중복된 데이터 시간을 처리해야하는데...여기서 멈처버렸네요 ㅠㅠ [1]
정재원
2010-07-28
6761
5715행 단위 인덱스넘버 부여 관련 질문드립니다 [1]
질문자
2010-07-28
6408
5714조건문을 작성하는데 어려움이 많네요 조언부탁드립니다. [4]
정재원
2010-07-28
12511
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다