0

良い一日、

次のデータを返す SQL クエリがあります。

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

そして、クエリを 3 つの項目でグループ化する必要があります。

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 を 1 ずつインクリメントしたいと考えています。

テーブルへのある種の行挿入を使用して、テーブルに挿入された行数を追跡できると確信しています。しかし、私はこれを SQL 自体でやってのけることができるかどうかを確認しようとしています。

これは可能ですか?

ティア、

コソン

4

2 に答える 2

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 に答える
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 に答える