본문 바로가기

반응형

msSQL

(69)
[MSSQL] 재귀 쿼리, 트리 구조 (CTE 재귀) 재귀 쿼리 CTE를 이용하여 재귀 쿼리를 작성해보자 WITH TEMP AS ( SELECT 컬럼 FROM 테이블명 UNION ALL SELECT 컬럼 FROM 테이블명 INNER JOIN TEMP ON 테이블명.컬럼 = TEMP.컬럼 ) 예제 1 재귀 쿼리를 통해 1부터 2씩 증가된 숫자를 출력 (200 이하) ;WITH TA AS ( SELECT 1 NUM UNION ALL SELECT NUM + 2 FROM TA WHERE NUM + 2
[MSSQL] 동적 PIVOT, 동적 UNPIVOT (dynamic pivot/unpivot) [MSSQL] PIVOT, UNPIVOT (행렬 변환) PIVOT / UNPIVOT PIVOT 과 UNPIVOT -- PIVOT SELECT 컬럼명 FROM 테이블명 PIVOT([집계 함수]([집계 컬럼명]) FOR [대상 컬럼명] IN ([컬럼이 될 값])) AS 피벗테이블명 -- UNPIVOT SELECT 컬럼명 FROM 테이블명 UNPIVOT([집계될 데이터의 컬럼명] FOR [UNPIVOT할 컬럼 데이터의 컬럼명] IN ([UNPIVOT할 컬럼명])) AS 언피벗테이블명 일반적으로 PIVOT과 UNPIVOT의 대상 컬럼과 컬럼이 될 값을 지정해줘야 한다. 그런데 만약 컬럼명이나 행의 값들이 동적이라면? 이를 고려하여 동적 PIVOT / UNPIVOT 쿼리를 작성해보자 동적 PIVOT DECLARE..
[MSSQL] TOP / TOP WITH TIES (상위 N개의 데이터 출력) TOP TOP은 상위 N개의 데이터를 출력한다 SELECT TOP 1 item, cnt FROM sql_test_a ORDER BY item DESC, cnt DESC 이렇게 TOP 1은 상위 데이터 1개만 출력된다. TOP WITH TIES TOP 과 동일하게 상위 N개의 데이터를 조회한다. 하지만 동일한 데이터가 있을 경우 함께 출력된다. TOP WITH TIES를 사용하기 위해서는 ORDER BY 절이 반드시 함께 와야 한다. (TOP의 경우 없어도 가능) 동일한 데이터는 ORDER BY절 뒤의 오는 컬럼이 기준이 된다. SELECT TOP 1 WITH TIES item, cnt FROM sql_test_a ORDER BY item DESC, cnt DESC 위의 TOP 예제에서와 다르게 데이터가 ..
[MSSQL] ROLLUP / CUBE / GROUPING SETS 소계 합계 ROLLUP - ROLLUP 함수는 소그룹 간의 소계를 계산한다. - ROLLUP은 GROUP BY의 확장 형태로 사용하기 쉬운데, GROUP BY에 있는 항목들을 오른쪽에서 왼쪽순으로 그룹으로 묶어 집계를 낸다. - GROUP BY a, b, c, d 로 묶은 뒤 ROLLUP 을 적용시켜 주면 -> (a, b, c, d) / (a, b, c) / (a, b) / (a) / () 이런식으로 그룹을 만들어가며 집계를 낸다. 예제 1단계. GROUP BY로 묶은 뒤 SUM SELECT item, SUM(cost) sum FROM sql_test_a GROUP BY item 3단계. ROLLUP 적용 -- 방법1. SELECT item, SUM(cost) sum FROM sql_test_a GROUP BY i..
[MSSQL] SQL Server APPLY 연산자 (테이블 반환 함수와 테이블의 조인) APPLY JOIN 및 서브쿼리, 커서를 대체할 수 있는 APPLY에 대해 알아보자 APPLY 연산자를 사용하면 쿼리의 외부 테이블 식에서 반환한 각 행에 대해 테이블 반환함수를 호출할 수 있다. APPLY 연산자에는 CROSS APPLY와 OUTER APPLY가 있다. CROSS APPLY 테이블 반환 함수로부터 결과 집합을 생성하는 외부 테이블의 행만 반환한다. OUTER APPLY 테이블 반환 함수로부터 결과 집합을 생성하는 행과 그렇지 않은 행을 모두 반환한다. 예제 다음의 값을 갖고 있는 테이블 TABLE_A가 있다. ID NAME YYMMDD 1 손꽁쥐 20001020 2 우바보 19550929 3 윤박사 19840303 그리고 FN_GET_INFO라는 테이블 반환함수가 있다. 해당 함수는 인..

반응형