ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 리스트 출력 프로시저 (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 이후는 페이징 설정

     

Designed by Tistory.