2012-05-24 3 views
4

다음 select 문을 감안할 때 : 나는 또한 추가 필드로 c.RowID을 선택하고 싶은T-SQL - 선택하여 그룹의 용어 또는 집계 기능이 있어야

Select t.name, SUM(st.row_count) as row_count 
From sys.dm_db_partition_stats st 
join sys.tables t on t.object_id = st.object_id 
join ClientUpdateConfig c on t.name = c.TableName 
Where (index_id < 2) and schema_id = schema_id('dbo') 
and t.type ='U' 
group by t.name 

합니다. 쿼리가 그대로 작동하지만 내가 1과 같이 변경 한 경우 :

Select t.name, SUM(st.row_count) as row_count, c.RowID as current_row 

다음과 같은 에러가 발생합니다

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

나는 집계 함수의 값을 선택을해야 할 것입니다 왜

사람이 설명 할 수 (I 'm이라고 가정) 또는 그룹을 선택하려면? 이 제한 사항을 이해하지 못합니다. 어쩌면 이것이 일어나는 이유를 이해할 수 있다면 쿼리 디자인을 조정할 수 있습니다.

+0

'GROUP BY t.name, c.RowID'를 추가 할 수 없습니까? 오류 메시지는 아주 자명합니다. 선택 목록의 항목이 집계가 아닌 경우 GROUP BY도 고려해야합니다. RowID가 중복되어 있고 하나만 원할 경우 SQL Server에 원하는 값 (보통 MIN 또는 MAX)을 알려줘야합니다. –

+1

사람들이 관계형 DB에 저장하는 것이 가장 어려운 작업 중 하나는 집계입니다. @ W00te,'GROUP BY'를 사용할 때 출력 행당 여러 소스 행을 선택합니다. 출력 행당 여러 개의 'RowID'값이 있기 때문에 원하는'RowId'를 지정해야합니다. – JNK

+0

포인터를 가져 주셔서 감사합니다. 이것은 내가 몇 번 실행 한 것들 중 하나이지만, 데이터베이스를 오프 - 앤 - 온으로 사용하기 때문에 항상 그 사이에 1 년입니다. 항상 나를 물으러 다시 온다. –

답변

7

선택할 RowId를 알 수 없기 때문에.

당신도 필요

. . . 
group by t.name, RowId 

나 : 당신이 이름 당 하나 개의 RowId가 있다는 것을 알고하더라도

select . . ., min(RowId) -- or max(RowId) 

이 데이터베이스는 사용자가 명시 적으로 말을, 그래서 알고하지 않습니다 당신이 쿼리에서하고 싶은 것.

+1

이 두 옵션간에 성능 차이가 있습니까? min() vs group by – VSP

+0

@ ase69s 나는 같은 것을 궁금해합니다. 당신은 대답을 얻었습니까? – gotqn

+0

@ ase69s. . . 이상한 질문입니다. 'min()'과'group by '둘 다 집계를하기 때문에 비슷한 성능을 가져야합니다. –

1

쿼리 결과는 여러 ROWS의 집계를 기반으로합니다. t.name과 함께 많은 행을 가져 와서 서로 다른 많은 수의 st.row_count 값을 만들고 하나의 행을 만듭니다 (t.name은 모든 집계 된 행에 대해 동일하고 모든 값의 합계는 t.row_count입니다). 그러한 집합체의 경우 합리적인 값은 c.Row_ID입니다. 그룹화하는 각 행에는 다른 값이 있으며 어떤 값을 사용해야하는지 결정할 방법이 없습니다. RowID이 숫자 인 경우 평균 또는 합계를 사용하거나 모든 ID 중 최소 (최소) 또는 최대 (최대)를 취할 수 있습니다. 아니 그게 의미가합니다. 이와 같은 값은 단순히 집계에 대해 존재합니다.

+0

+1, 설명 주셔서 감사합니다. –

관련 문제