msSQL(7)
-
DISTINCT vs GROUP BY
[ DISTINCT vs GROUP BY ] 단순그룹핑 vs 그룹핑 + 정렬 정렬 작업이 필요 없을 경우 DISTINCT 를 사용하는 것이 성능상 좋다. DISTINCT 는 집계 함수가 필요한 경우에는 단순 그룹핑이더라도 GROUP BY 를 사용해야 한다.
2022.02.15 -
[ PIVOT ] 행을 열로 바꾸기
프로젝트 시, 조회기간 일자별 통계 데이터 추출할 때 사용했었다. [ PIVOT ] SELECT * FROM ( PIVOT 대상 쿼리문 ) AS A PIVOT ( 그룹함수(기준컬럼) FOR 대상컬럼 IN ([],[]...) AS B [ UNPIVOT ] WITH [PIVOT_TABLE] AS ( SELECT... ) SELECT [컬럼] FROM PIVOT_TABLE UNPIVOT ( [컬럼] FROM [기준컬럼] IN ([컬럼]...)) AS [PIVOT명] ex) DECLARE @SQL NVARCHAR(MAX) = '' ,@SQL1 NVARCHAR(MAX) = '' SELECT @SQL = @SQL + '[' + CONVERT(VARCHAR, A.CDATE+A.ADDNUM) + '],', @SQL1 ..
2022.02.15 -
[ STUFF / FOR XML PATH ] 여러행 하나의 행으로 합치는 방법
[ STUFF ] - 문자열의 위치와 길이를 지정하여 다른 문자로 치환하는 함수. - 예시 : STUFF([문자열], [위치], [길이], [치환할 문자]) [ FOR XML PATH ] - 쿼리의 실행결과 데이터를 XML 형식으로 표현 - 예시 : FOR XML PATH([row element명]) ex) CASE WHEN COUNT(*) > 1 THEN STUFF( ( CASE WHEN * 'S' THEN ( SELECT (CASE WHEN *='S' THEN ',Q' ELSE ',' END) + * FROM ( SELECT CONCAT(*,'~',*) AS * , * FROM ( SELECT MIN(*) AS * , MAX(*) AS * , MAX(*) AS * FROM ( SELECT * , * ..
2022.02.15 -
CURSOR
[ 커서(CURSOR ) 반복문 구문 ] DECLARE @C_A VARCHAR(10) , @C_B VARCHAR(10) , @C_C VARCHAR(10) DECLARE RTN_CURSOR CURSOR FOR SELECT A, B, C FROM TABLE OPEN RTN_CURSOR WHILE( 1 = 1 ) BEGIN FETCH NEXT FROM RTN_CURSOR INTO @C_A, @C_B, @C_C IF ( @@FETCH_STATUS 0 ) BREAK; 로직 END CLOSE RTN_CURSOR DEALLOCATE RTN_CURSOR [ CURSOR 반복문에서 특정조건 시 로직 건너뛰게 하려면 GOTO 이용하면 된다. ] - IF 특정조건 BEGIN GOTO POINT_A (아무거나 상관없음) EN..
2022.02.15 -
MSSQL TIps
[ MSSQL 테이블 설명 쿼리 ] DECLARE @TABLE_NAME NVARCHAR(50) = '테이블명' SELECT A.NAME AS TABLE_NAME , C.VALUE AS TABLE_DESCRIPTION , D.NAME AS COLUMN_NAME , E.VALUE AS COLUMN_DESCRIPTION , F.DATA_TYPE AS TYPE , F.CHARACTER_OCTET_LENGTH AS LENGTH , F.IS_NULLABLE AS IS_NULLABLE , F.COLLATION_NAME AS COLLATION_NAME FROM SYSOBJECTS A WITH (NOLOCK) INNER JOIN SYSUSERS B WITH (NOLOCK) ON (A.UID = B.UID) INNER J..
2022.02.15 -
PROCEDURE Tips
[ MSSQL 자동 증가 시드값 가져오는 방법 ] - @@IDENTITY : 전체 범위에 대한 현제 세션에 있는 테이블에 대해 생성된 마지막 ID 값을 반환함 (연쇄적으로 발생해도 최종 시드값을 가져옴) [ MSSQL 텍스트 줄바꿈 ] - CHAR(13) + CHAR(10) 로 가능하다. [ 프로시저 에러발생 ] - RAISERROR('', 16, 1) [ 수정 결과 건수 ] - SELECT @@ROWCOUNT [ SET NOCOUNT ON ] - 불필요한 메세지가 네트워크 트래픽을 낭비할 경우에 사용 ※ 불필요한 메세지 : '~ 개 행이 적용되었습니다' 등등 [ SET TRANSACTION ISOLATION LEVEL ] - 격리 수준 옵션이다. - 한번에 하나만 설정 할 수 있다. - READ UNC..
2022.02.15