MSSQL

goddmk's DEV
[MSSQL] 그룹별로 문자열 묶어서 나타내기(STRING_AGG / STUFF, FOR XML PATH)
일을 하다 요청이 왔는데 요구사항은 다음과 같았다. 특정 데이터베이스에서 그룹별로 묶은 다음 합계를 구하는 것이 아니라 컬럼에 있는 값을 옆으로 쭉 나열해서 나타낸 데이터를 요구하였다.예를 들어 아래의 그림처럼 이름별로 가지고 있는 자격증을 쉼표로 구분하여 묶어서 표현한 데이터가 필요하다고 하였다.  STUFF와 FOR XML PATH 함수를 조합하여 사용하거나 STRING_AGG 함수를 사용하면 편리하게 나타낼 수 있다. 주의할 점은 STRING_AGG 함수는 SQL Server 2017 버전 이상부터 지원하므로 그 이하의 버전에서는 STUFF와 FOR XML PATH 함수를 사용하면 된다. 1. STUFF, FOR XML PATH 함수 사용먼저 버전이 낮은 경우 해당 함수를 사용하면 된다. STUFF..
[MSSQL] UNION 다루기
union은 보통 컬럼의 개수와 데이터 형식이 동일한 서로다른 두개의 테이블을 select 쿼리 할때 하나로 합쳐주는 기능을 한다. 예를 들어 select * from table1 select * from table2를 하면 질의 결과 2개의 테이블이 따로 나오게 되지만 union을 사용하게 된다면 table1과 table2가 전부 결과에 나온다. 보통 union 함수를 사용하는 경우는 2개의 테이블의 모든 데이터를 보기위해서 할때 도 있지만 합계를 맨 아래쪽에 나타내기 위해서도 사용한다. 물론 Rollup이라는 함수가 있지만 해당 함수는 그룹으로 묶어서 보여주기 때문에 그룹으로 묶어서 나타내기 싫을 경우 union을 사용하면 된다. 1. UNION 과 UNION ALLunion함수는 그냥 union과 ..
[MSSQL] PIVOT을 사용하여 행값을 컬럼으로 바꾸기
만약에 테이블에서 행값을 컬럼으로 주고 그것에 해당하는 값들을 집계를 구하여 표현하고 싶다면 PIVOT 함수를 사용하면 된다. 아래의 예제를 살펴보자 1. PIVOT 함수 예제NAME이라는 열의 속성들을 컬럼으로 바꾸고 그것에 해당하는 ITEM1 값들을 그룹화하여 집계를 내는 예제이다. 위의 사진 처럼 표현하기 위해서는 PIVOT함수를 사용하면 쉽게 표현 할 수 있다. 2. PIVOT 함수 사용방법PIVOT을 사용하기 위해서는 아래의 코드를 작성하면 된다.SELECT * FROM (피벗할 쿼리) AS A PIVOT (집계함수(집계컬럼) FOR 피벗컬럼 IN ([피벗컬럼값]...)) AS B 코드를 살펴보도록 하자먼저 하위쿼리에 PIVOT함수를 적용한 쿼리를 작성하면 된다.그런다음 피벗에 필요한 쿼리를 작..
[MSSQL] CASE문 다루기
쿼리를 사용하다 보면 조건에 따라 필요한 데이터를 불러와야 할 때가 많다. 만약 내가 특정 조건에 따라서 새로운 값을 반환해야 한다면 MSSQL에서 CASE문을 사용해서 원하는 데이터를 만들어 낼 수 있다. 프로그래밍에서 if 문처럼 조건절에 따라서 값을 표현해 주는 방식과 유사하다... 그러면 본격적으로 CASE문에 대해 알아보자 1. CASE문을 사용해서 SELECT 하기예를 들어 내가 점수별로 60 점 이상은 Good  60점 미만은 Bad 라고 표현할 수 있는 컬럼을 추가해 select 하고 싶다면 case문을 활용하면 된다. 아래와 같이 Item1 컬럼을 점수라고 보고 60점을 기준으로 good과 bad를 표현해 보겠다. SELECT ID,NAME,ITEM1, CASE WHEN ITEM1 >= ..
[MSSQL] 여러 조건으로 UPDATE 시키기 (UPDATE SET CASE...)
이전에 MSSQL에서 동적 쿼리를 사용해서 원하는 컬럼을 업데이트시켜 보았다. 이번에는 조금 다르게 내가 원하는 조건에 만족하는 데이터를 수정해 보도록 하겠다. 테스트 테이블은 이전 포스팅과 동일하게 할거라 이전 포스팅을 참고하자. 2024.08.12 - [데이터베이스/MSSQL] - [MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기 [MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기나는 DB로 mysql을 주로 사용하면서 공부했었는데, 이번에 일하면서 ASP.NET으로 구축된 웹 프로그램 DB가 MS-SQL을 사용하면서 mysql보다는 mssql에 더 익숙해져 갔다. 특히 프로시저를 많이 다뤘는데 프goddmk.tistory.com 1. 기존 Update 구문먼저 테이블의 데..
[MSSQL] 동적 쿼리를 사용하여 원하는 컬럼 업데이트 시키기
나는 DB로 mysql을 주로 사용하면서 공부했었는데, 이번에 일하면서 ASP.NET으로 구축된 웹 프로그램 DB가 MS-SQL을 사용하면서 mysql보다는 mssql에 더 익숙해져 갔다. 특히 프로시저를 많이 다뤘는데 프로시저를 짜내는 것이 너무 어려웠다. 그렇지만 아직까지는 큰 문제없이 잘 해내고 있는 것 같다. 그러던 중 프로그램 하나를 개발하는데... 웹에서 전달 받은 프로시저를 호출하여 DB를 업데이트시키는데 컬럼의 종류에 따라 DB를 업데이트시킬 필요가 있었다. 쉽게 말하면 아래의 테이블 구조처럼 되어있으면 저 컬럼명을 매개 변수로 받고 그 값에 따라 업데이트하고 싶다는 뜻이다. -- @ITEM 값에 ITEM1 이라는 값을 전달하면 ITEM1 컬럼만 업데이트 되도록@ITEM VARCHAR(2..
goddmk