-
리스트 출력 프로시저 (Join, Count, Sum)DB/MSsql 2022. 12. 23. 14:33
USE GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[usp_getCustomerSumList] @SearchType TINYINT -- 검색 타입 0. 고객사명 1. 사업자번호 2. 연락처 3. 파트너사명 , @SearchText VARCHAR(30) -- 입력값 , @Page INT , @PageSize INT , @startDate VARCHAR(10) , @endDate VARCHAR(10) AS SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ COMMITTED SELECT COUNT(*) OVER() AS totalCount , C.cstNo --고객번호 , C.cstName --고객사명 , C.bizNo , C.phone --연락처 , SUM(B.totSellAmount) as sumSellAmount , P.ptName FROM TB_Order O WITH(NOLOCK) INNER JOIN Tpartner P WITH(NOLOCK) ON O.User_SE = P.ptNo INNER JOIN Tcustomer C WITH(NOLOCK) ON O.Customer_User_SE = C.cstNo INNER JOIN TB_OrderAgg B WITH(NOLOCK) ON O.Order_SE = B.Order_SE WHERE C.isAlive = 'Y' and O.Delete_YN='N' and P.isAlive ='Y' AND O.Register_DT > @startDate AND O.Register_DT < DATEADD(D, 1, @endDate) AND ( (@SearchType = 0 AND C.cstName LIKE '%' + @SearchText + '%') OR -- 고객사명 (@SearchType = 1 AND C.bizNo LIKE '%' + @SearchText + '%') OR -- 사업자번호 (@SearchType = 2 AND C.manager LIKE '%' + @SearchText + '%')OR (@SearchType = 3 AND P.ptName LIKE '%' + @SearchText + '%') ) GROUP BY C.cstNo,C.cstName,C.bizNo,C.phone,P.ptName ORDER BY P.ptName ASC, sumSellAmount DESC--C.cstName, ptName OFFSET (@Page - 1)*@PageSize ROWS FETCH NEXT @PageSize ROWS ONLY; SET NOCOUNT OFF;
리스트 출력을 위한 프로시저이다.
totalCount를 받아서 총 페이지 수를 구할 때 사용한다.
sum을 통해 발주 금액을 합산하여 sumSellAmount로 보여준다
SUM으로 합하는 경우 묶이기 때문에 나머지 컬럼도 GROUP BY로 그룹화 시켜줘야 한다.
INNER JOIN으로 각각 조건에 맞는 테이블을 연결해주고 WHERE절에서 검색 조건을 설정해준다.
%변수%의 경우 문자에 '변수'가 들어간 것은 다 찾아낸다. ex)김변수, 변수김 등...
ORDER BY 를 통해 파트너 이름을 기준으로 먼저 오름차순, 발주총액을 기준으로 내림차순 정렬하였다.
OFFSET 이후는 페이징 설정