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 4411 게시물 읽기
No. 4411
작업별 처리율을 구하려고 합니다
작성자
쿼리질문요
작성일
2008-08-25 10:57ⓒ
2008-08-25 10:58ⓜ
조회수
5,327

with tmp as
(
SELECT 'A' AS 작업, '2008-01-01' AS 처리예정일, '2008-01-01' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-02' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-03' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-04' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-06' AS 처리예정일, '2008-01-07' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-08' AS 처리예정일, '2008-01-08' AS 처리일 UNION ALL
SELECT 'A' AS 작업, '2008-01-08' AS 처리예정일, '2008-01-09' AS 처리일 UNION ALL
SELECT 'B' AS 작업, '2008-01-03' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
SELECT 'B' AS 작업, '2008-01-04' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
SELECT 'B' AS 작업, '2008-01-05' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
SELECT 'B' AS 작업, '2008-01-05' AS 처리예정일, '2008-01-06' AS 처리일
)
SELECT * FROM tmp;

위와같은 데이터가 있습니다.

'작업별 처리율'을 구하려고 합니다.

처리율은 


작업별 처리일이 처리예정일보다 같거나 이전인 수 (A의 경우 4)
-------------------------------------------------------     X 100
작업별 전체수 (A의 경우 7)



이렇게 구할려고 합니다.

마지막 쿼리결과는

작업 처리율
---------------
A     57.1
B     50.0

이렇게 보여주려고 합니다.


처음엔 여러번 쿼리해서 조합하려고 했는데 한번의 쿼리로 가능할것 같은데 쉽지가 않네요^^

이 글에 대한 댓글이 총 1건 있습니다.
SELECT [작업], ISNULL(ROUND(CONVERT(FLOAT, SUM(CASE WHEN [처리일] <= [처리예정일] THEN 1 ELSE 0 END)), 2, 1), 0) /  COUNT(*) * 100
FROM
(
 SELECT 'A' AS 작업, '2008-01-01' AS 처리예정일, '2008-01-01' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-02' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-03' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-04' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-06' AS 처리예정일, '2008-01-07' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-08' AS 처리예정일, '2008-01-08' AS 처리일 UNION ALL
 SELECT 'A' AS 작업, '2008-01-08' AS 처리예정일, '2008-01-09' AS 처리일 UNION ALL
 SELECT 'B' AS 작업, '2008-01-03' AS 처리예정일, '2008-01-03' AS 처리일 UNION ALL
 SELECT 'B' AS 작업, '2008-01-04' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
 SELECT 'B' AS 작업, '2008-01-05' AS 처리예정일, '2008-01-05' AS 처리일 UNION ALL
 SELECT 'B' AS 작업, '2008-01-05' AS 처리예정일, '2008-01-06' AS 처리일
) AS test
GROUP BY [작업]

A의 경우 전체가 7건이고 작업별 처리일이 처리예정일보다 같거나 이전인 경우는 3건이네요.
소수점 맞추는 것은 한 번 해보시길...
지나가다님이 2008-08-25 12:58에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4414mssql 2005를 설치하는데, 설치처음에 ~~~공간이 부족하다는 에러가 나네요.
김훈
2008-08-25
5861
4413mysql에암호된것을 mssql사용가능한가요 [1]
김길동
2008-08-25
4764
4412문자를 날짜로 입력 [1]
고형윤
2008-08-25
6042
4411작업별 처리율을 구하려고 합니다 [1]
쿼리질문요
2008-08-25
5327
4410datetime 인덱스 질문입니다 [2]
권용재
2008-08-25
5007
4409개월수를 구하고 싶어요... [1]
정명규
2008-08-24
5063
4408오류코드 목록을 알고 싶습니다. [3]
구니
2008-08-23
5128
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다