美好的一天,
我有一个返回以下数据的SQL查询:
EmployeeID...Employee
555..........John Doe
666..........Jane Doe
777..........Bob Smith
888..........Jane Smith
999..........Fred Jones
000..........Freda Jones
我希望我的查询按三项分组:
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
换句话说,对于每条记录超过3条的记录,我想每三条记录增加一个项目。
我确信我可以在表中使用某种行插入并跟踪插入表中的行数。但是我试着看看我是否可以在SQL本身中解决这个问题。
这可能吗?
TIA,
COSON
答案 0 :(得分: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。
答案 1 :(得分:1)
如果您的数据库的SQL种类支持排名功能,您可以尝试这样的事情:
SELECT
FLOOR((ROW_NUMBER() OVER (ORDER BY EmployeeID) + 2) / 3) AS Item,
EmployeeID,
Employee
FROM Employees
ORDER BY EmployeeID
当两个操作数都是整数时,某些数据库系统会自动执行积分除法,其他数据库系统支持专用运算符(如DIV
)进行积分除法而不是/
。在提到的两种情况中,FLOOR()
当然都是不必要的。