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 6394 게시물 읽기
No. 6394
결석 횟수 구하기
작성자
전기영(gyjeon)
작성일
2012-07-11 10:38
조회수
7,851

selelct

1교시출석여부,2교시출석여부,3교시출석여부,4교시출석여부

from 출석부

 

결과

----------------------------------------------------------

이름       1교시출석여부     2교시출석여부         3교시출석여부        4교시출석여부

김동길     출석                      결석                         결석                          출석

홍길동      출석                     출석                          결석                         출석

 

이런 구조일 때 결석을 얼마나 했는지 알고 싶은데요

아래와 같이 출력되게 하려 합니다.

----------------------------------------------------------

이름     1교시출석여부   2교시출석여부   3교시출석여부   4교시출석여부  총결석횟수

김동길   출석                    결석                    결석                    출석                    2회

홍길동   출석                    출석                    결석                    출석                    1회
 

조언 좀 부탁 드려요 ^^

 

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

 WITH att( nm, a1, a2, a3, a4 )

AS
( SELECT 'k', 'o', 'x', 'x', 'o'
UNION ALL SELECT 'h', 'o', 'o', 'x', 'o'
)
SELECT att.nm, a1, a2, a3, a4, atcnt.ati
FROM att
INNER JOIN 
( SELECT nm, SUM( CASE WHEN at = 'o' THEN 1 ELSE 0 END ) AS ati
FROM att
UNPIVOT( at FOR att IN ( a1, a2, a3, a4 ) ) AS up
GROUP BY nm
) AS atcnt ON att.nm = atcnt.nm 
;
우욱님이 2012-07-11 10:57에 작성한 댓글입니다.
이 댓글은 2012-07-11 11:17에 마지막으로 수정되었습니다. Edit

적고나서 보니 출석을 셌군요.. ㄷㄷ

결석 버전.. *^_^*

 

WITH att( nm, a1, a2, a3, a4 )

AS

( SELECT 'k', 'o', 'x', 'x', 'o'

UNION ALL SELECT 'h', 'o', 'o', 'x', 'o'

)

SELECT att.nm, a1, a2, a3, a4, atcnt.ati

FROM att

INNER JOIN 

( SELECT nm, SUM( CASE WHEN at = 'o' THEN 0 ELSE 1 END ) AS ati

FROM att

UNPIVOT( at FOR att IN ( a1, a2, a3, a4 ) ) AS up

GROUP BY nm

) AS atcnt ON att.nm = atcnt.nm 

 

우욱님이 2012-07-11 11:00에 작성한 댓글입니다.
이 댓글은 2012-07-11 11:17에 마지막으로 수정되었습니다. Edit

 역시 CASE 떡칠이 백만배 빠르군요.. ㄷㄷ

 
WITH att( nm, a1, a2, a3, a4 )
AS
( SELECT 'k', 'o', 'x', 'x', 'o'
UNION ALL SELECT 'h', 'o', 'o', 'x', 'o'
)
SELECT 
nm, a1, a2, a3, a4 
, CASE WHEN a1 = 'x' THEN 1 ELSE 0 END 
+ CASE WHEN a2 = 'x' THEN 1 ELSE 0 END 
+ CASE WHEN a3 = 'x' THEN 1 ELSE 0 END 
+ CASE WHEN a4 = 'x' THEN 1 ELSE 0 END AS ati
FROM att
;
 
 

우욱님이 2012-07-11 11:15에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
6397C++ ODBC 연결중 궁금한 점. [2]
세균장군
2012-07-17
8502
6396WITH 임시테이블명 AS 명령어가 클라이언트에 따라서 에러가 발생해요.ㅠ.ㅠ [2]
권순환
2012-07-17
7408
6395[질문] SHRINKFILE MDF 파일 줄이기? [2]
궁금이
2012-07-16
8399
6394결석 횟수 구하기 [3]
전기영
2012-07-11
7851
6393[문의] MDF 파일 자동 증가 설정 후 증가 시점에 성능 저하 문의??? [1]
정규성
2012-07-10
8062
6392ms-sql에서 unsigned int는 없나요? [2]
초보
2012-07-06
11201
6391인덱스 생성 [4]
초보
2012-07-03
8017
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다