https://zawazawa.jp/ms-access/topic/785
以前、このレスでお世話になりました。
サブクエリについての書き方です。
自前で、適当なデータがなく、競馬のデータで、サンプルを作成しました。
クエリ1
SELECT
Left([レースID馬],16) AS レースID
,T2.単勝人気
,T2.数値合計
,T2.順位
,T2.単勝オッズ
,Val(Right([レースID馬],2)) AS ゼッケン
FROM MT_指数追加 AS T1
WHERE T2.順位=5
ORDER BY T2.単勝人気, T2.順位;
クエリ2
SELECT
Left([レースID馬],16) AS レースID
,T1.単勝人気
,T1.数値合計
,T1.順位
,T1.単勝オッズ
,Val(Right([レースID馬],2)) AS ゼッケン
FROM MT_指数追加 AS T1
WHERE T1.順位=2
ORDER BY T1.単勝人気, T1.順位;
クエリ1 クエリ2を
Left([T1].[レースID馬],16)でINNER JOINしたいのです。
SELECT
Left([T1].[レースID馬],16) AS レースID
,0 AS 返還フラグ
,4 AS 券種
,Val(Right([T1].[レースID馬],2)) AS 軸2
,Val(Right([T2].[レースID馬],2)) AS ヒモ
,0 AS 空白
,100 AS 購入金額
,Null AS 空白2
,"A" AS 自信
FROM MT_指数追加 AS T1
INNER JOIN
(SELECT
FROM MT_指数追加
T2.順位
)
ON AS T2
Left([T1].[レースID馬],16)=Left([T2].[レースID馬],16)
AND WHERE T1.順位=2
AND WHERE T2.順位=5
ORDER BY T1.単勝人気;
構文エラー
Left([T1].[レースID馬],16)=Left([T2].[レースID馬],16)の
演算子がありません。
SELECT
Left([T1].[レースID馬],16) AS レースID
,0 AS 返還フラグ
,4 AS 券種
,Val(Right([T1].[レースID馬],2)) AS 軸2
,Val(Right([T2].[レースID馬],2)) AS ヒモ
,0 AS 空白
,100 AS 購入金額
,Null AS 空白2
,"A" AS 自信
FROM
(
MT_売上 AS T1
INNER JOIN
(
MT_指数追加 AS T1
(
SELECT
Left([レースID馬],16) AS レースID
,T1.単勝人気
,T1.数値合計
,T1.順位
,T1.単勝オッズ
,Val(Right([レースID馬],2)) AS ゼッケン
WHERE T1.順位=2
FROM
MT_指数追加
(
SELECT
Left([レースID馬],16) AS レースID
,T2.単勝人気
,T2.数値合計
,T2.順位
,T2.単勝オッズ
,Val(Right([レースID馬],2)) AS ゼッケン)))) AS T2
ON
Left([T1].[レースID馬],16)=Left([T2].[レースID馬],16)
AND WHERE T1.順位=2
AND WHERE T2.順位=5
ORDER BY T1.単勝人気;
FROMの構文エラーとなります。
題材が、競馬なので、不謹慎かもしれませんが、どこを修正するのかご教示をお願いしいます
すいません
FROM MT_指数追加 AS T1 ⇒FROM MT_指数追加 AS T2
です。
ばっとみて、SQLが無茶苦茶です。なにをしたいのか分かりません。
いきなりサブクエリを使った一つのSQLを作成するのではなく、
サブクエリ部分のクエリを単独で作成して、そのクエリを使ったSQLを作成します。
それで、希望の結果がでるのが確認出来たら、クエリをサブクエリのSQLに変更するというようにしましょう。
この文章通りのことをしたいのなら、下記のようなSQLになります。
まず、これでご希望の結果になってますか。
なっているなら、クエリ1、クエリ2の部分をサブクエリSQLに変更するだけです。
ただ、いまのスキルレベルなら無理にサブクエリにせずに複数のクエリを組み合わせて作成した方がメンテナンス性もいいように思います。
ちなみに、サブクエリを使わなくても、下記のようなSQLで同じ結果になりそう。
hatena様
重ねての解答ありがとうございます。
やりたいことは下記のことです。
昨日は、
Q_指数買い目順位2⇒クエリ1
Q_指数買い目順位5⇒クエリ2
SELECT
クエリ1.,
クエリ2.
FROM
(SELECT
Left([レースID馬],16) AS レースID
,0 AS 返還フラグ
,4 AS 券種
,Val(Right([T1].[レースID馬],2)) AS 軸2
,0 AS 空白
,100 AS 購入金額
,Null AS 空白2
,"A" AS 自信
FROM MT_指数追加 AS T1
WHERE T1.順位=2
) As クエリ1 INNER JOIN
(SELECT
Left([レースID馬],16) AS レースID
,Val(Right([レースID馬],2)) AS ヒモ
FROM MT_指数追加 AS T2
WHERE T2.順位=5
) AS クエリ2
ON クエリ1.レースID = クエリ2.レースID;
SELECT
T1.[レースID]
,0 AS 返還フラグ
,4 AS 券種
,Val(Right([T1].[レースID馬],2)) AS 軸2
,Val(Right([T2].[レースID馬],2)) AS ヒモ
,0 AS 空白
,100 AS 購入金額
,Null AS 空白2
,"A" AS 自信
FROM
(SELECT
FROM MT_指数追加 AS T1
WHERE T1.順位=2
) As AS T1 INNER JOIN
(SELECT
FROM MT_指数追加 AS T2
WHERE T2.順位=5
) AS AS T2
ON Left([T1].レースID馬,16) = Left([T2].レースID馬,16)
このSQLを実行すると、FROM句の構文エラーとなります。
昨日はご不快な質問をして、申し訳ありませんでした。
今回記載したコードも全くとんちんかんな、コードでしょうか?
お手すきのときに回答いただけたら幸いです。
すいません、最初のクエリを、分けるつもりが、くっついてしましました。
見にくくて申し訳ありません。
下記でうまくいきませんかね。
hatena様
こんな質問にご丁寧に回答ありがとうございました。