2009-06-22 4 views
0

사람들이 생각하는 결과를 저장하는 간단한 테이블에 대한 인덱스 된 뷰를 만들려고합니다. 이것은 엄지 손가락/엄지 손가락을 내리고 게시물에 투표 한 결과입니다.2 COUNT_BIG의 인덱스 된 뷰를 만드는 데 도움이 필요합니다.

그래서 여기 내 pseduo 가짜 테이블의 : -

HelpfulPostId INT IDENTITY(1,1) NOT NULL PRIMARY KEY, 
PostId INT NOT NULL, 
IsHelpful BIT NOT NULL, 
UserId INT NOT NULL 

그래서 사용자는 게시물 당 하나의 투표를 할 수 있습니다. 1 (도움이되는) 또는 0 (도움이되지 않는 것) < - 더 나은 방법이 있다면, 그것을 다루는 더 좋은 방법은 확실하지 않습니다.

확인. 내가하려는 것은 다음과 같은 뷰를 얻는 것입니다.

HelpfulPostId INT의 IDENTITY (1,1) NOT NULL PRIMARY KEY,

PostId INT NOT NULL, 
IsHelpfulCount COUNT_BIG (WHERE IsHelpful = 1) 
IsNotHelpfulCount COUNT_BIG (WHERE IsHelpful = 0) 

그리고 마지막으로, 나는 그렇게 내가 PK에 인덱스를 추가 할 수 있습니다 schemabindable 확인해야합니다 다음 인덱스 PostId에.

SQL에 대해 잘 모르겠다. 어떤 제안?

건배 :)

+0

int 기본 키가 최대 행을 제한하는 경우 어떻게 count_big 할 수 있습니까? –

+0

COUNT 필드를 시도 할 때 인덱스 된보기가 COUNT_BIG 만 좋아하기 때문에 그렇게했습니다. –

답변

2

생각 :

    당신은 당신이하지 집계 비트 필드

있다 할 수

  • 인덱싱 된 뷰에서 COUNT (*)를 사용할 수 없습니다
  • 기타 limitations of indexed views

    CREATE VIEW dbo.Example 
    WITH SCHEMABINDING 
    AS 
    SELECT 
        PostId, 
        SUM(CAST(IsHelpful AS bigint)) AS IsHelpfulCount, 
        SUM(CAST(1-IsHelpful AS bigint)) AS IsNotHelpfulCount, 
        COUNT_BIG(*) AS Dummy --Used to satisfy requirement 
    FROM 
        dbo.bob 
    GROUP BY 
        PostId 
    GO 
    CREATE UNIQUE CLUSTERED INDEX IXC_Test ON dbo.Example (PostId) 
    GO 
    

    편집 : 실수로 원래 질문/게시물에 추가 된 ID 필드를 제거했습니다.

    편집 2 (GBN) : 나는 인덱싱 된 뷰 에있는 집계도는 COUNT_BIG (*)를 필요로하는 잊어 버렸습니다. 따라서 더미 컬럼으로 간단히 추가하십시오. 나는 이것을 시험했다.

    뷰 정의가 집계 기능을 사용하는 경우

    , 선택리스트 또한 COUNT_BIG (*)를 포함한다.

  • +0

    음 ... 그게 작동하지 않을거야 :(어떻게 IsHelpfulCount의 개수가 뭔지 알 수 있습니까?이 뷰에서 정의해야하는 것은 무엇입니까? (서브 쿼리 일 수 있습니까?) –

    +0

    IsHelpfulCount는 집계를 의미하지 않습니다. 당신은 그것을 시도했다 – gbn

    +0

    약간의 조정과 더불어, 그것은 지금 좋다. indentity 들판을 떨어 뜨려야했다 (나는 결과로서 그것을 두드러지게 게시했다.. 내가 aggregations : P를하고있을 때 불가능하다.) 나는 빠른 선택과 대조했다 2x subqueries (카운트 일을) 그리고 그것은 모두 좋다 :) 나는 1 & 0을 사용하고있어 운이 좋다. 그래서 SUM이 작동 할 것이다. –