2

このサンプル データベースのクエリを作成しようとすると、問題が発生します: 3 つのテーブル = Program Code、Work、Work Code。プログラム コード テーブルは、ワーク コード テーブルを介して、ワーク テーブルと多対多の関係にあります。テーブル レイアウトは次のとおりです。

Work: ID,Employee ID, Type of work, description, hours
Work code: ID, Program Code, Work ID
Program Code: Program Code

ここで、従業員は仕事を完了しますが、その仕事に対して複数のコードを請求する必要があります。これにより、Work Code テーブルに多くのレコードが作成されます。従業員 ID、仕事の種類、説明、時間数を取得し、その 1 つのジョブ エントリに使用されるすべてのプログラム コードをリンクするクエリを作成したいと考えています。実行するクエリがありますが、1 つのフィールドにすべてのプログラム コードを含む 1 行ではなく、プログラム コードごとに 1 行が作成されます。これは、SQL バックエンドを備えた Access フロント エンドです。

これは私が今持っているものです:

SELECT Work.ID, Work.[Employee ID], Work.[Type of work], Work.description, Work.hours, [Work Code].[Program Code]
FROM [Work Code] INNER JOIN [Work] ON [Work Code].[Work ID] = Work.ID;

しかし、ワーク ID ごとに 1 つのフィールドにプログラム コードを配置したいと考えています。

4

1 に答える 1

0

私が考えることができる唯一の解決策は、おそらくあなたが探しているものではなく、GROUP BY ステートメントを使用することです。

SELECT Work.ID, Work.[Employee ID], Work.[Type of work], Work.description, 
Sum(Work.hours) as SumOfHours, [Work Code].[Program Code]
FROM [Work Code] INNER JOIN [Work] ON [Work Code].[Work ID] = Work.ID
GROUP BY Work.ID, Work.[Employee ID], 
Work.[Type of work], Work.description, [Work Code].[Program Code];

複数の結合された行を単一の行の単一のフィールドに強制する方法が SQL にあることを認識していません。この種の機能が必要な場合、私は通常、作業テーブル内にコンマで区切られた形式でプログラム コードを格納するという非常に汚いハックを使用します。通常、プログラム コードが入力されているときに、コードを使用してそれらを取得します。

補足として、テーブル名とフィールド名にスペースを使用しないことをお勧めします。SQL は、すべてに括弧がなくても読み書きがはるかに簡単です。テーブル エイリアスの使用は、SQL を読みやすくするもう 1 つの便利な方法です。

いくつかの変更を加えると、SQL は次のようになります。

SELECT w.ID, w.EmployeeID, w.WorkType, w.Description, 
Sum(w.hours) as SumOfHours, wc.ProgramCode
FROM WorkCode AS wc INNER JOIN Work AS w ON wc.WorkID = w.ID
GROUP BY w.ID, w.EmployeeID, 
w.WorkType, w.Description, wc.ProgramCode;
于 2013-08-30T03:58:53.907 に答える