SQLServer 데이터베이스의 데이터 취합 전체 분석(WITH ROLLUP)

3342 단어
기존 테이블 A의 내용은 다음과 같습니다.
          
      01   A    6
      01   B    7
      02   A    8
      02   B    9

이 형식을 인코딩하여 검색하려면 다음과 같이 하십시오.
01   A    6
      01   B    7
          :   13
      02   A    8
      02   B    9
          :   17

문: 어떻게 실현해야 합니까?
언뜻 보기에는 쉬울 것 같은데 그룹 by로 할 수 있을 것 같은데?하지만 곰곰이 연구해 보면 그룹 by도 무능하고 뭔가 부족해서 손댈 수가 없다고 느낄 것이다.그럼 도대체 어떻게 해야 하나요?서두르지 마세요. SQL Server는 이미 우리를 도와줬어요. 다음은 따라오세요.
먼저 다음 내용을 살펴보겠습니다.
ROLLUP 연산자는 소계와 합계를 포함하는 보고서를 생성할 때 유용합니다.ROLLUP 연산자가 생성한 결과 세트는 CUBE 연산자가 생성한 결과 세트와 유사합니다.
CUBE 연산자가 생성한 결과 세트는 다차원 데이터 세트입니다.다차원 데이터 집합은 사실 데이터의 확장이고 사실 데이터는 개별 사건을 기록하는 데이터이다.확장은 사용자가 분석하고자 하는 열에 세워집니다.이 열들은 비라고 불린다.다차원 데이터 집합은 결과 집합으로 각 차원의 모든 조합이 가능한 교차 표를 포함한다.
CUBE 연산자는 SELECT 문의 GROUP BY 자문에 지정됩니다.이 문장의 선택 목록은 차원열과 집합 함수 표현식을 포함해야 한다.GROUP BY는 차트 열과 키워드 WITH CUBE를 지정해야 합니다.결과 집합은 차원 열의 각 값의 모든 가능한 조합과 이 차원 값 조합과 일치하는 기초 줄의 집합 값을 포함합니다.
큐브와 ROLLUP의 차이점은 다음과 같습니다.
CUBE에서 생성한 결과 세트는 선택한 열의 중앙값에 있는 모든 조합의 집합을 표시합니다.
ROLLUP에서 생성한 결과 세트는 선택한 열의 중간값에 대한 계층 구조의 집합을 나타냅니다.
이상의 이 단락을 보고 무엇을 깨달았습니까?만약 없다면......헤헤, 당신의 깨달음이 아직 부족합니다.
SELECT   ,   , Sum(  ) as   
      FROM A
      GROUP BY   ,    WITH ROLLUP

-- 관건은 바로 뒤에 있는 WITH ROLLUP이다
-- 물론 WITH CUBE도 쓸 수 있지만 결과는 좀 다를 것 같은데
아마도 위의 이 부분을 보고 나서 너는 여전히'구름 속에 안개가 낀다'고 느낄 것이다.도저히 몰라도 괜찮아, 직접 해.
먼저: 위에서 말한 A표를 만들고 몇 줄의 데이터를 입력한다.
이어서: SQL Server 조회 분석기를 열고 위에서 만든 A표를 포함하는 서버를 연결하여 이 표를 포함하는 데이터베이스를 선택하십시오.
그리고: Copy 위에 있는 SQL 문장,Paste를 검색 분석기에 넣고 F5를 누르는 게 어때요?밑에 뭐가 나오는 거 봤어?내 밑에 거랑 똑같지 않아?
              
      01      A      6
      01      B      7
      01     NULL     13
      02      A      8
      02      B      9
      02     NULL     17
      NULL    NULL     30

-- WITH CUBE를 사용한다면 결과집 뒤에 두 줄이 더 나온다(예시의 몇 줄만 입력한 경우).
NULL     A     14
      NULL     B     16

어!이상하게도 결과에 왜 그렇게 "NULL"값이 많지?하, 서두르지 마라. 이 몇 줄이 바로 우리가 필요로 하는 총결산 데이터 줄이다. 알아보기 어렵지 않다.
01 NULL 13은 01로 인코딩된 모든 창고의 수량을 합한 것이다.02 NULL 17은 02로 인코딩된 모든 창고의 수량을 합한 것이다.
NULL NULL 30은 모든 자료 행의 수를 요약한 것입니다.
어떻게답이 나왔죠?너무 쉽죠?물론 위에는'NULL'이 많이 존재한다는 단점이 있다.이런 무의미한 NULL을 어떻게 없애죠?다음은 우리가 다시 최적화를 진행할 것이다.
1. NULL 값을 그룹으로 대체
SELECT CASE WHEN (GROUPING(  ) = 1) THEN 'ALL'
      ELSE ISNULL(  , 'UNKNOWN')
      END AS   ,
      CASE WHEN (GROUPING(  ) = 1) THEN 'ALL'
      ELSE ISNULL(  , 'UNKNOWN')
      END AS   ,
      SUM(  ) AS   
      FROM A
      GROUP BY   ,    WITH ROLLUP

-- Case 함수를 적절히 활용
결과적으로 나는 여기에 쓰지 않겠다. 바로 위의 'NULL' 값을 모두 'ALL' 문자열로 바꾸는 것이다
2. 프로그램을 이용하여 한층 더 최적화한다.
//일반적으로 표시상의 수요를 위해 우리는 상기 SQL 문장이 생성한 결과에 대해 최적화를 해야 한다. 다음은 자연 언어 설명을 제시한다.
WHILE(         ){
        IF      ALL     ALL
        {
                “  :”  ,     ""  ;
                       ;
        }
        ELSE     ALL     ALL
        {
                “  :”  ,     ""  ;
                        ;
        }
               ;
      }

좋은 웹페이지 즐겨찾기