2014-02-24 5 views
0

기본 순위를 만들고 가장 많이 나오는 발표자의 결과를 가장 낮은 순위로 정렬하려고합니다.SQL Server : 계산하여 합계 및 순서를 계산하십시오.

groupCount 및 GROUP BY를 제거하면 제대로 작동하지만 다음과 같이 시도했지만 발표자 그룹에 포함시키지 못했습니다. 기본적으로 가장 많이 제시 한 사람 (groupCount의 최대 값)을 맨 위에 표시 한 다음 가장 낮은 순위 (예 : groupCount의 최소)를 표시하는 것이 가장 좋습니다. 지금까지

Msg 8120, Level 16, State 1, Procedure CountPresenters, Line 17 
Column 'MeetingDetails.topic' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

내 저장 프로 시저 :이 어떤 도움, 팀에 대한

ALTER PROCEDURE [dbo].[CountPresenters] 
    @title nvarchar(200) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT  B.presenter, 
       B.topic, 
       A.meetingDate, 
       A.title, 
       COUNT(*) AS groupCount 
    FROM  MeetingDetails B 
    INNER JOIN MeetingDates A 
    ON   B.meetingID = A.meetingID 
    WHERE  B.itemStatus = 'active' 
    AND   A.title LIKE '%'[email protected]+'%' 
    GROUP BY B.presenter 
    ORDER BY groupCount desc, B.presenter, A.meetingDate desc 
    FOR XML PATH('presenters'), ELEMENTS, TYPE, ROOT('ranks') 
END 

많은 감사

내가 점점 오전 오류는 다음과 같다.

+0

MAX (B.topic),? – StanislavL

+1

조인과 관련이 없으므로 열을 집계하는 경우 모든 열도 집계되거나 그룹화되어야합니다. –

답변

0

: GROUP BY 절에서

ALTER PROCEDURE [dbo].[CountPresenters] 
    @title nvarchar(200) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT  B.presenter, 
       B.topic, 
       A.meetingDate, 
       A.title, 
       COUNT(*) AS groupCount 
    FROM  MeetingDetails B 
    INNER JOIN MeetingDates A 
    ON   B.meetingID = A.meetingID 
    WHERE  B.itemStatus = 'active' 
    AND   A.title LIKE '%'[email protected]+'%' 
    GROUP BY B.presenter, 
       B.topic, 
       A.meetingDate, 
       A.title 
    ORDER BY groupCount desc, B.presenter, A.meetingDate desc 
    FOR XML PATH('presenters'), ELEMENTS, TYPE, ROOT('ranks') 
1

기능별로 그룹을 사용하는 동안 포함해야하는 select 문으로 가져온 필드가 무엇이든간에. 다음은 수정 된 쿼리입니다. 그것이 효과가 있기를 바랍니다. 나는이 임시 테이블을 사용하여 해결할있어

ALTER PROCEDURE [dbo].[CountPresenters] 
    @title nvarchar(200) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT  B.presenter, 
       B.topic, 
       A.meetingDate, 
       A.title, 
       COUNT(*) AS groupCount 
    FROM  MeetingDetails B 
    INNER JOIN MeetingDates A 
    ON   B.meetingID = A.meetingID 
    WHERE  B.itemStatus = 'active' 
    AND   A.title LIKE '%'[email protected]+'%' 
    GROUP BY B.presenter, B.topic, 
       A.meetingDate, 
       A.title 
    ORDER BY groupCount desc, B.presenter, A.meetingDate desc 
    FOR XML PATH('presenters'), ELEMENTS, TYPE, ROOT('ranks') 
END 
+0

감사합니다. 여기서 나는 좋은 오류를 얻지 못한다. 그러나 나는 원하는대로 그룹과 질서를 여전히 doesnt한다. 그것은 발표자별로 그룹화해야하며 가장 높은 그룹 수에서 가장 낮은 그룹으로 순서를 지정해야합니다 (나머지는 덜 중요합니다). – user2571510

+0

추가 : 문제는 프레젠터가 두 번 이상 표시 되더라도 항상 1로 시작하므로 발표자의 수를 추가하지 않는다고 생각됩니다. – user2571510

+1

아래 필드를 모두 표시 하시겠습니까? B. 대표, B.topic, A.meetingDate, A.title, –

1

당신은 발표자

수정 쿼리와 함께 주제, meetingDate와 제목을 추가해야합니다. 어쨌든 고마워 !

+0

감사합니다. 이것은 위와 같습니다.그것은 작동하지만 그것은 발표자가 두 번 이상 나타나더라도 각 레코드를 개별적으로 계산할 수 있도록 groupCount별로 그룹화하지 않습니다. – user2571510

+0

같은 발표자에 대해 단일 카운트를 추가하지 않는 것 같습니다. – user2571510