한 row에 어떠한 column 집합을 연속적으로 연결해서 보여주고 싶을 때가 있다. 특히 데이터를 연결해서 보여줄 때 comma separated list, delimiter를 사용한다. MySQL은 GROUP_CONCAT, Oracle은 LISTAGG, SQL Server는 STRING_AGG를 사용한다. 그러나 string_agg 함수는 sql server 2017부터 지원하는 함수이다. 이전에는 stuff, for xml, path를 사용하여 구현하였다. 대용량이 아닐 경우는 아래와 같이 sqlclr을 사용하면 group concat을 쉽게 구현할 수 있다.
-- dbo.GROUP_CONCAT(VALUE)
-- dbo.GROUP_CONCAT_D(VALUE, DELIMITER)
-- dbo.GROUP_CONCAT_DS(VALUE, DELIMITER, SORT_ORDER)
-- dbo.GROUP_CONCAT_S(VALUE, SORT_ORDER) -- 1:asc, 2:desc
SELECT some_id,
dbo.GROUP_CONCAT(some_column) as delimited_list
FROM dbo.some_table
GROUP BY some_id;
업무용 프로그래밍 개발은 대부분이 Database 설계와 구축 그리고 집합개념으로써 SQL의 이해가 모든 것을 좌우한다고 봐도 무방하다. 그러나 현실은 현업 개발자 중 100에 1명 정도 꼴로 이러한 중요성을 인지하고 있다. 프로그래밍 언어 방식의 사고에서 집합개념의 SQL로 사고의 전환은 매우 어렵다. 아래의 추천 서적은 업무용 개발자가 필수로 이해해야 만 하는 Database 서적이다. 기본 서적 정도의 개념이 없는 사람은 이 분야 개발에서 악의 축이므로 피하시길 간곡히 호소하는 바이다.
# 기본
1. 조시형, 친절한 SQL 튜닝, DBian, 2018
2. 정재우, SQL Server 튜닝 원리와 해법, 비투엔컨설팅, 2010
3. 김상래, 프로젝트 성패를 결정짓는 데이터 모델링 이야기, 한빛미디어, 2015
4. 이춘식, 아는 만큼 보이는 데이터베이스 설계와 구축, 한빛미디어, 2008
5. 유동오, 핵심 데이터 모델링, DBian, 2020
# 고급
1. 조시형, 오라클 성능 고도화 원리와 해법 I, 비투엔컨설팅, 2009
2. 조시형, 오라클 성능 고도화 원리와 해법 II, 비투엔컨설팅, 2010
3. 이춘식, 데이터베이스 설계와 구축(개정판), 한빛미디어, 2011
윈도는 충분히 유니코드를 지원하나 몇몇 유틸리티는 기본적으로 CP949, MS949, EUC-KR 같은 문자 셋으로 동작한다. 이건 Visual Studio도 마찬가지이다. 리눅스나 macOS와 소스 호환을 위하여 UTF-8을 사용하는 것이 마땅하다. Qt Creator의 Text Editor → Behavior → File Encodings 옵션을 기본인 UTF-8로 사용할 때 fromLocal8Bit() 와 같은 함수를 사용하지 않고 바로 영어 문자처럼 작성하고 컴파일하면 된다. QT버전은 5.12.0이며 이 버전부터는 MinGW 64bit가 기본이다. 설치할 때 MinGW, MSVC를 선택하였다. 아래의 3가지 정도의 방법으로 한글 처리를 하는 것을 추천한다.