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 7171 게시물 읽기
No. 7171
난제를 하나 만났습니다
작성자
조기석
작성일
2019-06-27 06:31ⓒ
2019-06-27 06:50ⓜ
조회수
2,015

 

grp_id section code col1 col2 col3 col4 col5 col6
11 1 A data1 data3 data3 data3 data3 data3
11 1 B data2 data3 data3 data3 data3 data3
11 1 C data3 data3 data3 data3 data3 data3
11 1 A data3 data3 data3 data3 data3 data3
11 2 D data3 data3 data3 data3 data3 data3
11 2 F data3 data3 data3 data3 data3 data3
11 3 H data3 data3 data3 data3 data3 data3
11 3 K data3 data3 data3 data3 data3 data3
11 3 F data3 data1 data1 data1 data1 data1
11 3 K data3 data3 data3 data3 data3 data3
12 1 C data2 data1 data1 data1 data2 data3
12 3 .. ..          
12 3 ... ...          
12 4 .. ..            

위와 같은 데이터셋을 조인으로 만들었습니다

그리고 아래와 같이 표현해야 하는데요

 

grp_id section code col1 col2 col3 col4 col5 col6 section 별 record count 
11 1 A data1 data3 data3 data3 data3 data3 4
11 1 B data2 data3 data3 data3 data3 data3 4
11 1 C data3 data3 data3 data3 data3 data3 4
11 1 A data3 data3 data3 data3 data3 data3 4
11 2 null null null null null null null 2
11 3 null null null null null null null 4
12 1 C data2 data1 data1 data1 data2 data3 1
12 3 null null null null null null null 2
12 4 null null null null null null null 1

결과 표와 같이 section 1의 record는 전부를 표시하고 나머지, 즉 section 1이 아닌 데이터들은 section 값과,  해당 section 별 count 만 출력하고 싶습니다

section 별 갯수는 쉽게 쿼리가 가능한데 section 1 이 아닌 나머지 section 들은 count만 출력하는게 힘이 듭니다

union 외에는 다른 방법이 생각 안나는데 고수님들의 기똥찬 기법 하나 알려주실수 있으신지요?

도와주시면 너무 감사드리겠습니다

이곳에서 큰 도움을 받고 있습니다

오랫동안 유지되기 바라며 도움 부탁드립니다

 

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

키가 어떻게 되나요?
(grp_id, section, code) 3개 항목으로는 레코드 구별이 가지 안네요?
레코드를 구별할 수 있는 항목은 없나요?

마농(manon94)님이 2019-06-27 11:14에 작성한 댓글입니다.

 마농님 관심 감사드립니다

각 레코드를 구별할수 있는 컬럼이 있구요

불필요할거 같아서 제외시켰으나 제가 잘못 생각한듯 합니다

각 레코드의 키는 id 이며 정수입니다

조기석님이 2019-06-27 11:27에 작성한 댓글입니다. Edit

WITH t(grp_id, section, id, code, c1, c2, c3, c4, c5, c6) AS
(
          SELECT 11, 1,  1, 'A', '1', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 1,  2, 'B', '2', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 1,  3, 'C', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 1,  4, 'A', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 2,  5, 'D', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 2,  6, 'F', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 3,  7, 'H', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 3,  8, 'K', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 11, 3,  9, 'F', '3', '1', '1', '1', '1', '1'
UNION ALL SELECT 11, 3, 10, 'K', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 12, 1, 11, 'C', '2', '1', '1', '1', '2', '3'
UNION ALL SELECT 12, 3, 12, 'X', '3', '1', '1', '1', '1', '1'
UNION ALL SELECT 12, 3, 13, 'Y', '3', '3', '3', '3', '3', '3'
UNION ALL SELECT 12, 4, 14, 'Z', '2', '1', '1', '1', '2', '3'
)
SELECT grp_id, section, id, code
     , c1, c2, c3, c4, c5, c6
     , SUM(COUNT(*)) OVER(PARTITION BY grp_id, section) cnt
  FROM t
 GROUP BY grp_id, section, ROLLUP ((id, code, c1, c2, c3, c4, c5, c6))
HAVING GROUPING(id) = CASE section WHEN 1 THEN 0 ELSE 1 END
;

마농(manon94)님이 2019-06-27 15:08에 작성한 댓글입니다.

맙소사!

다시한번 이곳 절정고수님들에게 감동을 느끼는 순간입니다

해결 안되는게 없네요

정말 정말 감사드립니다 마농님

조기석님이 2019-06-27 19:18에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
7175SQL의 간소화 [2]
ohyouknow
2019-07-15
1909
7173SQLServer 2016. 에러 해결 방법 고언 부탁드립니다.
해결요청
2019-07-10
1909
7172특정 컬럼 암호화 관련 문의 드립니다.
chu
2019-07-02
1794
7171난제를 하나 만났습니다 [4]
조기석
2019-06-27
2015
7170폼에서 입력한 데이타가 입력되는 테이블찾기 [1]
초보
2019-06-15
1800
7169SSMS에서 작업 [1]
초보
2019-06-15
1796
7168MSSQL 미러링 관련 질문입니다.
미러링
2019-06-14
1734
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다