Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトルフィールド−サブクエリの形の実行
記事No172205
投稿日: 2018/03/29(Thu) 11:47
投稿者なな
解決済: ON
OS:
Access Version:2010

お世話になっております。


今回、
select Aテーブル.Aフィールド−(select ~from~where~) as 名前
from
where


という形のsqlをaccessで実行しようとしたのですが、うまくできませんでした。

上のような形のsqlは通用しないのでしょうか?


Aフィールドの値から、作ったサブクエリの値をマイナスしたく、こういう形になってしまったのですが・・

タイトルRe: フィールド−サブクエリの形の実行
記事No172207
投稿日: 2018/03/29(Thu) 12:40
投稿者hatena
解決済: ON
> 今回、
> select Aテーブル.Aフィールド−(select ~from~where~) as 名前
> from
> where
>
>
> という形のsqlをaccessで実行しようとしたのですが、うまくできませんでした。
>
> 上のような形のsqlは通用しないのでしょうか?

Aテーブル.Aフィールド−(select ~from~where~)

の −(ハイフン)は、実際は、 -(マイナス)ということでしょうか。
つまり、Aフィールド から サブクエリの値をマイナスしたいということでしょうか。

もし、そうなら、サブクエリはレコードを1件のみ返すものでないとエラーになります。
(Access限らずDB一般でそうなります。)

そうでないなら、実際のSQLと、ご希望のことを明確に説明してください。

タイトルRe^2: フィールド−サブクエリの形の実行
記事No172212
投稿日: 2018/03/29(Thu) 22:45
投稿者なな
解決済: ON
> > 今回、
> > select Aテーブル.Aフィールド−(select ~from~where~) as 名前
> > from
> > where
> >
> >
> > という形のsqlをaccessで実行しようとしたのですが、うまくできませんでした。
> >
> > 上のような形のsqlは通用しないのでしょうか?
>
> Aテーブル.Aフィールド−(select ~from~where~)
>
> の −(ハイフン)は、実際は、 -(マイナス)ということでしょうか。
> つまり、Aフィールド から サブクエリの値をマイナスしたいということでしょうか。
>
> もし、そうなら、サブクエリはレコードを1件のみ返すものでないとエラーになります。
> (Access限らずDB一般でそうなります。)
>
> そうでないなら、実際のSQLと、ご希望のことを明確に説明してください。

hatenaさん
ありがとうございます!!


そうです、ハイフンと書いたのですが-のことでした、すみません。

そうなんですね!

聞いたことあるかもしれないのですがすっかり忘れてました汗



コードというフィールドがAテーブルとBテーブルの両方に存在しています。
ここの分野のものはこれとこれとこれがある、といったような仕分けをするためのコードのため、同コード中には複数の違ったものが存在しています。


また、同コード中のもの1つ1つに1から番号がふられていて(番号フィールドとします)、この時の同コードの番号の最後に指定された物の点数のフィールドの点数から、最初の番号に指定されている物のCフィールドの点数を引き算したいと思っています。

ただ、番号フィールドの番号の大きさが様々で、番号が指定できないため、最後の番号を指定したい時、
番号=数(そのコード中に全部でいくつ存在するかが書いてあるフィールドです)

として考えました。

説明下手で分かりづらくてすみません汗

以下のようなものです。

Aテーブル
コード|数
111. |3
112. |4
113. |2


Bテーブル
コード |番号|点数
111. |1. |95←
111. |2. |93
111. |3. |92←
112. |1. |96←
112. |2 |90
112. |3. |86
112. |4. |70 ←
113. |1. |99←
113. |2. |90←



求めたいもの
コード |最高点ー最低点
111 |3
112. |26
113. |9


自分でつくったsqlは、
最高点はつくってあるので、
SELECT A.最高点-( SELECT B.点数
FROM A INNER JOIN B ON A.コード = B.コード
WHERE B.番号= A.数
)
AS 最低点数
FROM A INNER JOIN B ON A INNER JOIN B ON A.コード = B.コード
WHERE B.コード in (SELECT B.コード
FROM A INNER JOIN B ON A.コード = B.コード
WHERE B.番号= A.数
)

というものです。


よろしくお願いいたします。

タイトルRe^3: フィールド−サブクエリの形の実行
記事No172215
投稿日: 2018/03/31(Sat) 18:52
投稿者hatena
解決済: ON
いろいろ考えられます。

フィールドサブクエリを使うなら、下記とか。

案1
SELECT
A.コード,
(SELECT 点数 FROM B WHERE B.コード= A.コード AND B.番号=1)
-(SELECT TOP 1 点数 FROM B WHERE B.コード= A.コード ORDER BY B.番号 DESC)
AS 点差
FROM A;

あるいは、抽出条件を使って

案2
SELECT B.コード, B.点数-B1.点数 AS 点差
FROM
B INNER JOIN B AS B1 ON B.コード = B1.コード
WHERE
B.番号=1 AND
B1.番号=(SELECT Max(番号) FROM B AS B2 WHERE B2.コード=B1.コード);

ただ、上記の2案は相関サブクエリになるので、速度的に不利になるかも。
そこで、結合を使って、

案3
SELECT C.コード, B.点数-B1.点数 AS 点差
FROM
(
(SELECT コード, Min(番号) AS Min番号, Max(番号) AS max番号
FROM B GROUP BY B.コード) AS C
INNER JOIN B ON C.コード = B.コード AND C.Min番号 = B.番号)
INNER JOIN B AS B1 ON C.Max番号 = B1.番号 AND C.コード = B1.コード;

とか、

案4
SELECT D.コード, D.点数-B.点数 AS 点差
FROM
(
(SELECT B.[コード], B.点数
FROM B WHERE B.番号=1) AS D
INNER JOIN E ON D.コード = E.コード)
INNER JOIN B ON E.Max番号 = B.番号 AND E.コード = B.コード);

タイトルRe^4: フィールド−サブクエリの形の実行
記事No172216
投稿日: 2018/04/02(Mon) 05:06
投稿者なな
解決済: ON
hatenaさん

できました!!!本当にありがとうございます!!!

こうして親切に教えてくださって、本当にどうお礼をしたら良いのか分からないのですが・・・本当に感謝しかないです。

でも、見たことのある構文でできていて、私も勉強したものなのに、本当に全く思いつかなかったです汗
活用するのが難しいなと感じます汗

自分の力では本当に全くと言っていいほどできず難しいのですが、教えていただき理解を深めていくうちに、少し面白くなってきました♪


本当にありがとうございました。

タイトルRe^2: フィールド−サブクエリの形の実行
記事No172214
投稿日: 2018/03/31(Sat) 02:37
投稿者なな
解決済: ON
> > 今回、
> > select Aテーブル.Aフィールド−(select ~from~where~) as 名前
> > from
> > where
> >
> >
> > という形のsqlをaccessで実行しようとしたのですが、うまくできませんでした。
> >
> > 上のような形のsqlは通用しないのでしょうか?
>
> Aテーブル.Aフィールド−(select ~from~where~)
>
> の −(ハイフン)は、実際は、 -(マイナス)ということでしょうか。
> つまり、Aフィールド から サブクエリの値をマイナスしたいということでしょうか。
>
> もし、そうなら、サブクエリはレコードを1件のみ返すものでないとエラーになります。
> (Access限らずDB一般でそうなります。)
>
> そうでないなら、実際のSQLと、ご希望のことを明確に説明してください。


変なことを聞いてしまい、申し訳ありませんでした。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る