0

再会,

我有一个返回以下数据的 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 条记录的记录,我想每 3 条记录将 Item 增加一个。

我确信我可以使用某种行插入到表中并跟踪插入到表中的行数。但我想看看我是否可以在 SQL 本身中实现这一点。

这可能吗?

TIA,

科森

4

2 回答 2

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

你可以在这里玩小提琴。

于 2012-04-10T06:32:08.293 回答
1

如果您的数据库的 SQL 品种支持排名功能,您可以尝试这样的事情:

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

当两个操作数都是整数时,一些数据库系统会自动执行整数除法,而其他数据库系统则支持专用运算符(如DIV)来进行整数除法而不是/。当然,在这两种情况下FLOOR()都是不必要的。

于 2012-04-10T13:56:10.243 回答