質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

518閲覧

Accessでfirst関数以外を使って集約したい

ataru2222

総合スコア272

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2021/07/07 13:18

前提・実現したいこと

サンプルデータの
一番左のフィールドの値を「合計」としてshozoku_nameで集約して金額の合計値を算出したい。
「管理職」「一般職」ごとに合計値を算出
※今回日付を無視したい

発生している問題・エラーメッセージ

https://teratail.com/questions/347829#
前回教えていただいた、Accessでのfirst関数を使うと一行にすることができるのですが、今回はWHERE句で指定してあげる必要があるのですが、プログラムで書くため、動的である必要があり、今回first関数以外の方法を使わなければいけないと感じているのですが、このような場合管理職や一般職等をまとめる方法が知りたいです。

イメージ説明

該当のソースコード

SELECT first(kj_name) ,first(busho_name) ,first(shozoku_name) ,SUM(kingaku) as 合計 ,first(k_date) FROM ( ( kjData LEFT JOIN m_busho ON kjData.busho = m_busho.busho_id ) LEFT JOIN m_shozoku ON kjData.shozoku = m_shozoku.shozoku_id ) LEFT JOIN m_kj ON kjData.kojo = m_kj.kj_id WHERE busho_name = "総務" and kj_name = "工場"

試したこと

UNION句を使い、WHERE句の値を変する方法を試すもサンプルデータで管理職等が入っている場所が固定値でないため断念

サブクエリや、GROUP BYを使う必要がある気がしているのですが、私自身、まだまだ未熟ゆえコードが思い浮かびません。
こちらについて解決方法がお分かりになる方いらっしゃいましたらご教授願います。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

order by を付けても駄目ですか?

若しくは、where条件を指定している項目を、group byすればfirst()を使わなくて良いですよね。

投稿2021/07/07 14:43

sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ataru2222

2021/07/07 21:26 編集

いつもありがとうございます。 >where条件を指定している項目を、group byすればfirst()を使わなくて良いですよね。 こちらを行いたいのですが、GROUP BYするにはどうしたらよいのでしょうか? (また振り出しに戻ってしまってすみません) SELECT kj_name, busho_name, shozoku_name, kingaku FROM ((kjData LEFT JOIN m_busho ON kjData.busho = m_busho.busho_id) LEFT JOIN m_shozoku ON kjData.shozoku = m_shozoku.shozoku_id) LEFT JOIN m_kj ON kjData.kojo = m_kj.kj_id GROUP BY busho_name,shozoku_name MYSQLではこれでいけたのですが、ACCESSSQLではSELECTの中と同じ項目を書かないとエラーになってしまう→GROUP BYの中にbusho_name,shozoku_nameのみ書いてもダメ、これらのみ書かなくてもダメ。 →SELECTの中の記述をいじる必要がある?→構文がわからないといった状況に陥っています。
sazi

2021/07/08 00:33 編集

first()を外す項目のみgroup by します。 > MYSQLではこれでいけた ONLY_FULL_GROUP_BYにより緩い設定になっているからですね。 MySQLに特殊な拡張があるだけです。
sazi

2021/07/08 00:39 編集

MySQLのテーブルをAccessで参照しているのであれば、パススルークエリーならMySQLの文法の利用が可能です。 複数のリンクテーブルを結合しているようなクエリーの場合、結果だけを返すパススルークエリーの方が高速です。
ataru2222

2021/07/08 11:39

saziさん ありがとうございます。 >first()を外す項目のみgroup by します。 無事できました。 mySQLで覚えたgroup byの使い方が当たり前だと思っていたので、今回大変な目にあいました(笑) 解説までしていただき、本当にありがとうございました。 これからも学習を続けていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問