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 5940 게시물 읽기
No. 5940
여러조건의 갯수 구하기 쿼리 질문입니다.
작성자
최지훈(telilbo)
작성일
2011-08-22 12:07
조회수
7,191

 

데이터 테이블 형태

 

부서 / 타입

A부서, A

B부서, A

.

.

.

 

위와 같은 식으로 데이터가 나열되어 있습니다.

위 데이터들을... 아래와 같은 방식으로 검색결과를 얻고 싶습니다.

 

부서명 / A타입갯수 / B타입갯수 / C타입갯수 / D타입갯수

A부서 , 1 , 0, 0, 0

B부서 , 2, 0, 0, 0

.

.

 

서브쿼리를 써봐도 해결이 안되고 머리를 굴려도 잘 안되는데...

방법이 있을 까요? 테이블 한개에서 저런식으로 데이터를 뽑아내려 하는데 헷갈립니다.

도움좀 주세요.ㅠㅠ

 

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

ansi 구문이니 mssql에서도 그대로 적용해보세요.

 

 mysql> create table testtb(dept varchar(10), type char(1));

Query OK, 0 rows affected (0.02 sec)

 

mysql> insert into testtb (dept, type) values ('A부서', 'A'),('A부서', 'B'),

    -> ('A부서', 'A'), ('B부서', 'A');

Query OK, 4 rows affected, 4 warnings (0.01 sec)

Records: 4  Duplicates: 0  Warnings: 4

 

mysql> select * from testtb;

+------+------+

| dept | type |

+------+------+

| A??  | A    |

| A??  | B    |

| A??  | A    |

| B??  | A    |

+------+------+

4 rows in set (0.00 sec)

 

mysql> select 

    -> dept 

    -> , sum(case when type = 'A' then 1 else 0 end) as type_A

    -> , sum(case when type = 'B' then 1 else 0 end) as type_B

    -> from testtb

    -> group by dept 

    -> ;

+------+--------+--------+

| dept | type_A | type_B |

+------+--------+--------+

| A??  |      2 |      1 |

| B??  |      1 |      0 |

+------+--------+--------+

2 rows in set (0.00 sec)

 

mysql> 

 

.님이 2011-08-23 09:30에 작성한 댓글입니다. Edit

with test as
(
select 'A부서' 부서, 'A' 타입 UNION ALL
select 'B부서', 'A' UNION ALL
select 'C부서', 'B' UNION ALL
select 'A부서', 'D' UNION ALL
select 'A부서', 'D' UNION ALL
select 'B부서', 'A' UNION ALL
select 'B부서', 'C' UNION ALL
select 'D부서', 'A' UNION ALL
select 'D부서', 'B'
)

SELECT * INTO #Temp FROM Test

1. 우선 "타입"의 종류가 정확히 정해져 있다면 위에 .님이 사용하셨던데로 하면 되구요

ex> 타입 A ~ D라고 했을경우

SELECT 부서
  , SUM(CASE WHEN 타입 = 'A' THEN 1 ELSE 0 END) 타입_A
  , SUM(CASE WHEN 타입 = 'B' THEN 1 ELSE 0 END) 타입_B
  , SUM(CASE WHEN 타입 = 'C' THEN 1 ELSE 0 END) 타입_C
  , SUM(CASE WHEN 타입 = 'D' THEN 1 ELSE 0 END) 타입_D
  FROM #temp
 GROUP BY 부서

2. 하지만 "타입"이 가변적일 경우.. 어디까지 나올지 모을경우

아래와 같이 동적쿼리를 사용하셔야 합니다. 아직 다른방법은 못찾아서리..

아래 쿼리를 참고하시길 바랍니다.


DECLARE @SQL varchar(2000)

SELECT @SQL = 'SELECT 부서'
SELECT @SQL = @SQL + ',SUM(CASE WHEN 타입=''' + 타입 + ''' THEN 1 ELSE 0 END) AS 타입_' + 타입
  FROM (select distinct 타입 as 타입
       from #Temp) t
 
SELECT @SQL = @SQL + ' FROM #Temp GROUP BY 부서'

--print (@sql)
EXEC (@SQL)

착한넘(agoodman99)님이 2011-08-25 10:12에 작성한 댓글입니다.
이 댓글은 2011-08-25 10:13에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
5943MSSQL에서 여러개의 합산값중 제일 작은 값을 구하고 싶은데...ㅠ.ㅠ [1]
이성근
2011-09-08
6508
5942Numeric Field 숫자 별로 더해서 변수로 저장... [1]
pipe
2011-09-05
6039
5941DB제대로 된 설계인지 궁금해서 질문드립니다. [1]
DB설계초보자
2011-08-23
6775
5940여러조건의 갯수 구하기 쿼리 질문입니다. [2]
최지훈
2011-08-22
7191
5939sql 2005 업데이트시 컬럼 크기 관련 에러 [3]
다크나인
2011-08-19
7024
5938Truncate 시 Deadlock 관련
무적
2011-08-18
6279
5937운영데이터를 개발서버로 이관하려고 합니다.2008 R2버전입니다. [2]
자민
2011-08-18
6173
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.029초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다