こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL文を教えて下さい

VB2008、SQL Server で開発をしています。
下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。
おわかりの方、教えてください。

仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。
    売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。
    得意先マスタの全得意先を取得する必要があります。
    すべての得意先の売上データが存在するわけではありません。

ACCESS上でクエリを作成し、SQLビューにすると、こうなります。

inptSyoCD:画面から入力した商品コード

1,まず、クエリ1:
SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称
FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名
WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ;

2,次に、実際に処理するSQL文:
SELECT 得意先M.得意先コード, 得意先M.得意先名称,
      クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名
 FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード
ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード;

この2つをひとつのSQL文にする方法がわかりません。

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

投稿日時 - 2011-09-12 14:34:34

QNo.7006012

困ってます

質問者が選んだベストアンサー

ASによるフィールドの別名を取り除いて
みたらどうですか。

投稿日時 - 2011-09-13 18:13:54

お礼

回答ありがとうございます。
単純ミスでした。訂正して、思い通りの結果になりました。
今週納品に間に合います。大変助かりました。
本当にありがとうございます。

投稿日時 - 2011-09-14 09:29:06

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

SQL = SQL & " 売上T.N AS 商品コード, "
SQL = SQL & " 商品M.B AS 商品コード, "

別名としての商品コードを重複して取り出そうとしていますが。

投稿日時 - 2011-09-13 18:03:12

ANo.1

変なところ;

(1)
>商品M 売上T.商品コード = 商品M.商品名
商品M 売上T.商品コード = 商品M.商品コード

では?

(2)
>FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名
FROM 商品M INNER JOIN 売上T ON 商品M.商品コード = 売上T.商品コード

では?

(3)
商品名称と商品名の混在



以上を修正して、2のSQL文の
JOIN クエリ1
のクエリ1をクエリ1のSQL文に置き換え置き換えたSQL文を()で囲み、
(SELECT 売上T.伝票日付, 売上T・・・・) AS Temp
として、2のSQL文の「クエリ1」をTempに書き変える。

投稿日時 - 2011-09-12 22:16:49

補足

早速、回答いただき、ありがとうございます。
実際のSQLl文をわかりやすいように、日本語に置き換えた時に、項目名を間違えてしまいました。ご指摘の通りです。
 さて、お教え頂いたようにしてみましたが、やはりエラーになります。
(エラーメッセージは、”ODBCドライバは要求されたプロパティをサポートしていません。”)
単純に3つのテーブルを LEFT JOIN したSQLは正常に読めているので、SQL文の間違いしか考えられません。
 下記、実際のSQL文です。どうにも困ってしまっています。間違いがおわかりであれば、再度お教え頂きたく、よろしくお願いします。

SQL = ""
SQL = SQL & "SELECT "
SQL = SQL & " 得意先M.B AS 得意先コード, "
SQL = SQL & " 得意先M.C AS 得意先名称, "
SQL = SQL & " Temp.* "
SQL = SQL & " FROM 得意先M"
SQL = SQL & " LEFT JOIN "
SQL = SQL & "("
SQL = SQL & "SELECT "
SQL = SQL & " 売上T.H AS T1, "
SQL = SQL & " 売上T.D AS 伝票日付, "
SQL = SQL & " 売上T.N AS 商品コード, "
SQL = SQL & " 商品M.B AS 商品コード, "
SQL = SQL & " 商品M.C AS 商品名称 "
SQL = SQL & " FROM 売上T"
SQL = SQL & " LEFT JOIN 商品M"
SQL = SQL & " ON 商品M.B = 売上T.N "
SQL = SQL & ") AS Temp "
SQL = SQL & " ON 得意先M.B = TEMP.T1 "
SQL = SQL & ";"

投稿日時 - 2011-09-13 13:46:42

あなたにオススメの質問