SQL Server에서 A, B, 그리고 각각의 A 값에 대한 카운트를 하나의 행에 열로 표시하려면, 피벗(PIVOT) 기능을 사용할 수 있습니다. 피벗을 사용하면 각 A 값이 열로 변환되며, 각 열의 값은 해당 A 값의 카운트가 됩니다.
가정: 테이블 구조
- TableName 테이블에 A, B 열이 있다고 가정합니다.
- A 열에는 여러 종류의 값이 있으며, 이 값들을 기준으로 카운트를 집계합니다.
예제: 피벗을 사용하여 A 값의 카운트를 열로 표시
SELECT
B,
[A1],
[A2],
[A3],
[A4],
[A5]
FROM (
SELECT
B,
A,
COUNT(1) AS CountA
FROM
TableName
GROUP BY
B, A
) AS SourceTable
PIVOT (
SUM(CountA)
FOR A IN ([A1], [A2], [A3], [A4], [A5])
) AS PivotTable
ORDER BY B;
설명:
- 서브쿼리: 먼저 B, A, 그리고 각 A 값의 카운트를 집계합니다.
- GROUP BY B, A: B와 A로 그룹화하여 각 A 값에 대한 카운트를 계산합니다.
- 피벗:
- PIVOT (SUM(CountA) FOR A IN ([A1], [A2], [A3], [A4], [A5])): 각 A 값이 열로 변환되며, 각 열의 값은 해당 A의 카운트입니다.
- 결과: 최종적으로 B와 각 A 값의 카운트를 열로 표시합니다.
주의사항:
- IN 절에 지정된 A1, A2, A3, A4, A5는 실제로 A 컬럼에 있는 값으로 대체해야 합니다. 예를 들어, A 값이 'Type1', 'Type2', 'Type3' 등일 경우, 해당 값을 정확하게 열 이름으로 지정해야 합니다.
- 만약 A 값의 종류가 동적으로 변화한다면, 동적 SQL을 사용하여 피벗 쿼리를 작성해야 할 수 있습니다.
동적 피벗 예시
동적 피벗을 사용하면 테이블의 A 값이 변해도 자동으로 피벗을 적용할 수 있습니다.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
-- A 값 가져오기
SELECT @cols = STRING_AGG(QUOTENAME(A), ', ')
FROM (SELECT DISTINCT A FROM TableName) AS Temp;
-- 피벗 쿼리 생성
SET @query = 'SELECT B, ' + @cols + '
FROM (
SELECT B, A, COUNT(1) AS CountA
FROM TableName
GROUP BY B, A
) AS SourceTable
PIVOT (
SUM(CountA)
FOR A IN (' + @cols + ')
) AS PivotTable
ORDER BY B;';
-- 실행
EXEC sp_executesql @query;
이 동적 피벗 예시는 A 값의 종류에 따라 자동으로 피벗 쿼리를 생성하고 실행합니다.
'프로그래밍 > DataBase' 카테고리의 다른 글
[DataBase] Postgres를 검색엔진으로 활용하기 (2) | 2024.09.02 |
---|---|
[MS-SQL] mssql sum / 5 소수점 한자리까지. avg 소수점 한자리 (0) | 2024.04.17 |
[MSSQL] varchar nvarchar 차이점과 검색시 유리한 형태 (0) | 2024.03.12 |
[MSSQL] 테이블 정보 확인 (0) | 2024.01.17 |
[MSSQL] CHARINDEX 두개의 문자 에서 문자 찾기 (0) | 2024.01.13 |