복붙노트

[SQL] 어떻게 SQL Server를 단일 테이블에 가입하여 요약을 만들 수 있습니까?

SQL

어떻게 SQL Server를 단일 테이블에 가입하여 요약을 만들 수 있습니까?

나는 업데이트 데이터를 반복 일부 필드가있는 테이블이있다. 나는 그것을 요약이 데이터를 롤업하고 싶다. 어떻게 SQL Server에 대해이 작업을 수행합니까? I 아래 출력 구조의 일례를 갖는다. 좀 다른 조인을 시도했다하지만 난 이해하지 않는 데이터와 약간의 오차가 반복 보았다.

테이블 구조

데이터

f1, 3, 0
f1, 2, 1
f1, 3, 0
f2, 1, 1
f2, 1, 1
f2, 2, 1
....

산출

File | Count of status == 1 | Count of status == 2 
f1   | 59                  | 43
f2   | 28                  | 99
f3   | 23                  | 16

해결법

  1. ==============================

    1.롤업를 사용하여 데이터를 요약 :

    롤업를 사용하여 데이터를 요약 :

    http://msdn.microsoft.com/en-us/library/ms189305(v=sql.90).aspx

    당신은 무엇 SQL 서버의 버전을 사용하고 있습니까?

    당신이 롤업 사용하려는 해달라고하면이 도움이 될 것입니다 :

    SELECT
          FileName,
          SUM(CASE WHEN Status = 1 THEN 1 ELSE 0 END) AS CountOf1,
          SUM(CASE WHEN Status = 2 THEN 1 ELSE 0 END) AS CountOf2,
          SUM(CASE WHEN Status = 3 THEN 1 ELSE 0 END) AS CountOf3
    FROM
          MyTable
    GROUP BY FileName
    ORDER BY FileName
    
  2. ==============================

    2.위, 여기에 SQL Server 2005 또는를 사용하는 가정하면 코드입니다 :

    위, 여기에 SQL Server 2005 또는를 사용하는 가정하면 코드입니다 :

    DECLARE @cols VARCHAR(1000)
    DECLARE @sqlquery VARCHAR(2000)
    
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName(cast([status] as varchar))
                            FROM LogTable FOR XML PATH('') ), 1, 1, '') 
    
    
    SET @sqlquery = 'SELECT * FROM
          (SELECT UserIndex,  [status]
           FROM LogTable ) base
           PIVOT (Count(status) FOR [status]
           IN (' + @cols + ')) AS finalpivot'
    
    EXECUTE ( @sqlquery )
    

    이 상관없이 당신이 얼마나 많은 다른 상태 작동하지 않습니다. 동적으로 PIVOT과 쿼리를 어셈블합니다.

    최신 정보

    @JonH가 지적한 바와 같이, 가능한 주입 공격을 만든 내가 게시 된 코드의 취약점이 있었다. 이것은 지금 열 이름을 형성 할 때 QUOTENAME를 사용하여 고정된다.

    다른 예 :

  3. ==============================

    3.

    SELECT 
        file,
        SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS [Count of status == 1] ,
        SUM(CASE WHEN status = 2 THEN 1 ELSE 0 END) AS [Count of status == 2] 
    FROM Table 
    GROUP BY file 
    ORDER BY file 
    
  4. from https://stackoverflow.com/questions/6849678/how-do-i-build-a-summary-by-joining-to-a-single-table-with-sql-server by cc-by-sa and MIT license