2014-05-22 1 views
0

안녕하세요 모두 matty (nom varchar, prenom varchar, departement (varchar))라는 테이블이 이고 i 각 열마다 고유 한 열 값에 대해이 값의 발생 수를 갖는 테이블을 가지기를 원합니다.함수에서 변수를 사용하십시오 T-sql 각 GROUP BY 표현식은 외부 참조가 아닌 하나 이상의 열을 포함해야합니다

create function countnumberoccurenceofcolumn(@column varchar(20),@limit int) 
returns @tab table (modalite varchar(20) , occurence int) 
as 
begin 
Insert into @tab select @column,count(@column) as occurence from matable group by  @column,departement 
return 
end 
go 

하지만 난이 오류가 : - 문하여 그룹을 포함해야

Each GROUP BY expression must contain at least one column that is not an outer reference. 

감사

답변

0

당신은 아무것도에 의해 그룹화하지 않을를 내가이 기능을 가지고있는이 작업을 수행하려면 수학 연산자가 아니고 선택 목록에있는 열 이름입니다. 나 : e :

그룹화를 사용하면 항목을 수집하고 함께 수학 연산자를 조합 할 수 있습니다. 그래서, 예를 들어 "을 MyTable"이 데이터를 주어진 :

Hello 2 
Goodbye 1 

조회에서 COUNT 연산자에서 떨어져 아무것도 포함하지 않는다 :

ID Value 
1 Hello 
2 Hello 
3 Goodbye 

그런 다음에

SELECT Value, COUNT(*) from MyTable GROUP BY Value 

의 원인이겠습니까이 쿼리를 실행 . 따라서 GROUP BY가 필요 없거나 SELECT 및 GROUP 문에 다른 열을 포함해야합니다.

편집 : 동적으로이 작업을 수행해야하는 경우

, 당신은 문자열을 구축하고 동적 SQL을 사용하여 실행해야합니다. 그래서 :

declare @sql nvarchar(999) 

set @sql = 'Insert into @tab select ' + @column + ', count(' + @column + ') as occurence from  
matable group by ' + @column + ',departement' 

exec @sql 

그러나, 나는 쿼리 (또는 기능) 서면으로 작동을 믿지 않는다. 바라기를 이것은 당신을 당신의 방법으로 설정하는 데 충분한 정보입니다.

+0

감사합니다. Matt.하지만 함수에 매개 변수로 전달되는 열 이름으로 동적으로 그룹화 할 수 없습니다. – medman

+0

OK, 문자열을 작성하여 실행해야합니다. 편집 할 것입니다. –

+0

ok Matt thanks 덕분에 다시 감사 할 것입니다 – medman