2012-04-10 5 views
0

좋은 날, SQL 그룹화

I가 다음과 같은 데이터를 반환하는 SQL 쿼리 :

Item.........EmployeeId........Employee 
1............555...............John Doe 
1............666...............Jane Doe 
1............777...............Bob Smith 
2............888...............Jane Smith 
2............999...............Fred Jones 
2............000...............Freda Jones 
:

EmployeeID...Employee 
555..........John Doe 
666..........Jane Doe 
777..........Bob Smith 
888..........Jane Smith 
999..........Fred Jones 
000..........Freda Jones 

와 나는 세 가지의 항목으로 그룹 내 쿼리를 원하는을

즉, 3 개 이상의 레코드가있는 모든 레코드에 대해 세 개의 레코드마다 하나씩 항목을 증가 시키길 원합니다.

필자는 일종의 행 삽입을 테이블에 삽입하고 테이블에 삽입 된 행 수를 추적 할 수 있다고 확신합니다. 하지만 SQL 자체에서이 문제를 해결할 수 있는지 확인하려고합니다.

이것이 가능합니까?

TIA,

coson

+3

어떤 DBMS를 사용하고 있습니까? SQL Server, Oracle, MySQL 등을 사용하는지 여부에 따라 다른 솔루션이있을 수 있습니다. – joshuahealy

+0

employeeId andemployee 및 3으로 나누십시오. – Goran

+1

질문에 누락 된 주문 기준이 필요합니다. –

답변

1

, 당신은 이런 식으로 뭔가를 시도 할 수 있습니다 : 두 피연산자가 모두 정수가있을 때

SELECT 
    FLOOR((ROW_NUMBER() OVER (ORDER BY EmployeeID) + 2)/3) AS Item, 
    EmployeeID, 
    Employee 
FROM Employees 
ORDER BY EmployeeID 

일부 데이터베이스 시스템은 자동으로 통합 부문을 수행, 다른 사람들이 (DIV을 같은) 전용 연산자를 지원하기위한 / 대신 정수 나누기. 언급 한 두 경우 모두 FLOOR()은 물론 불필요합니다.

+0

(Very) minor nitpick : 해당 함수의 공식 (ANSI 표준) 이름은 "윈도우 함수"(순위 함수가 아님)입니다. –

+0

아주 잘 말씀 드리지만, 실제로 그 사실을 알았습니다. 나는 윈도우 잉 함수가 윈도우 잉 집계 함수를 포함하는 더 넓은 용어라고 생각했다. 어쩌면 * 순위 함수 *를 의미하는 특정 공식 용어가 있을까요? 알다시피,'ROW_NUMBER()','RANK()'등등. –

+0

좋은 지적;) 표준은 다음과 같이 말한다. "* 윈도우 함수는 : ... 순위 함수, 분포 함수, 행 번호 함수, a 윈도우 집계 함수 ... * " –

1

음, 이것은 대부분의 DBMS에서 작동합니다 :

select floor((count(*) + 2)/3) item, t1.employeeId, t1.employee 
from t t1 
join t t2 on t1.employeeId >= t2.employeeId 
group by t1.employeeId, t1.employee 
order by t1.employeeId 

당신은 바이올린 here로 재생할 수 있습니다. 데이터베이스의 SQL의 다양한 순위 기능을 지원하는 경우