• 締切済み

汎用性があるSQL式を教えて欲しいです

フラグ ナンバー 名前 カテゴリ 日付 1 大根 野菜 10/1 △ 2 りんご 果物 10/2 3 りんご 果物 4 牛肉 肉類 10/3 このような表を フラグ ナンバー 名前 カテゴリ 日付 1 大根 野菜 10/1 3 りんご 果物 10/2 4 牛肉 肉類 10/3 このようにselectで表示させたいのですが 自分が考えたのは果物だけのテーブルを作り、表示させたいようにinner joinで果物のりんご同士を結合させ日付は△のを表示させるように作り 果物以外のテーブルとUnionさせたのですが もう少し汎用性があるものへ昇華させたいとのですが考えが及びません 他にどのように表現出来るでしょうか?

みんなの回答

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.10

3-3.メニューの補足  メニューのレコードソースは1レコードだけの「プロフィール」  IDのないテーブルです。これを実現するのがフォームのプロパティーです 3-3-1.フォームプロパティ ・メニューを右クリック→デザインビュー→▼デザイン→▼プロパティー  →▼書式タブ  →(3)追加の許可 いいえ  →(4)削除の許可 いいえ  →(5)更新の許可 はい 3-3-2.フィールドフォームプロパティ  レコードソースのプロフィールの項目は誰でも  変更できるものではありません。  この画面では、ロックをかけ参照だけにしておきます。  画面の下辺がプロフィール項目です  →左端の期初月の左辺にマウスカーソルを近付けると右向き矢印が   表示される。そのままクリック   列の全てが選択中になります  →▼プロパティー→▼書式タブ→編集ロック はい  →デザインビューを閉じる   プロフィール項目の変更は特定の人がテーブルを開いてやります。 ------------------------------------------------------- 3-3-3.ラベルのクリックイベントで閉じる、終了する  「フォームを閉じる」「アプリケーションを終了する」ボタン(コマンド)  を「閉じる」ラベル「終了」ラベルのクリックイベントでする ---------------------------------- Private Sub 終了する_Click() DoCmd.Quit End Sub ---------------------------------- Private Sub 閉じる_Click() DoCmd.Close End Sub ---------------------------------- 3-4.Accessのオプション  オプションに入る  ▼ファイル   左端に表示されるリストの最下辺下  →▼オプション   オプション画面表示 3-4-1.ファイルを開いたとき最初に、メニューフォームを開く  →▼現在のデータベース→▼フォームの表示のプッルダウン→メニュー 3-4-2.ナビゲーション枠を非表示にする  →ナビゲーションウィンドウを表示するのチェックを外す   この場所は画面の下の方にあります。   これに気付く利用者は稀ですのでテーブルを直接編集する人も限られます。 3-4-3.クイックアクセスツールバーの管理  ツールはアイコンだけになります。ご自身で配置して下さい    オプションに入る  ▼ファイル→▼オプション   オプション画面表示  →(1)▼クイックアクセスツールバー  →(2)挿入位置    選んだツールの次に追加されます  →(3)▼コマンドの選択のプルダウン    沢山のタブが表示されますがタブ内のツールは重複配置しています    これらのタブから追加するのは次の3つくらいです。    ・フォームタブ    ・作成タブ     ここから追加するツールは      「テーブルデザイン」      「フォームデザイン」      「レポートデザイン」      ウィザードはリリース当初のままのようでお勧めできません    ・フォームデザインツール配置タブ  →(4)目的のツール  →(5)追加   (6)クイックアクセスツールバーのツールの移動   なでかテキストボックッス等はツールではないためか   どのタブからも見つかりません   リボンから追加して下さい 因みにこちらのアクセスツールバーです。 ・先頭のレコード ・前のレコード ・次のレコード ・最後のレコード ・やり直し ・元に戻す ・プレビューと印刷  今までは「プレビュー」でしたが  最近全てのコマンドにあるこれに差し替えました ・フォームデザイン ・デザインビュー ・既存のフィールド追加 ・プロパティ―シート ・集合形式 ・表形式 ・レイアウトの削除 ・スペース調整 ・なし(=スペースなし) ・サイズの自動調整 ・低いコントロールに合わせる ・高いコントロールに合わせる ・狭いコントロールに合わせる ・広いコントロールに合わせる ・右揃え(ボックスを) ・左揃え ・上揃え ・下揃え ・フォント ・左揃え ・中央揃え ・右揃え ・コピー ・クリップボード ・タブコントロール  このコントロールのアイコンはフォームのプロパティのようにタブを重ねて  タブ毎にフォームを入れてメニューからこれを配置したフォームを開く ・テキストフィールド(フォームコントロール) ・ラベル(フォームコントロール) ・コードの表示 ・コンボボックス(フォームコントロール) ・背景色 ・線の色 これで、アクセスツールバーの幅がテキストフィールドで溢れラベル移行折り返され隠れてしまいます ------------------------------------------------------------- もし解り難い回答で行き詰まっておられるなら 3.3.メニューフォーム を先に試して下さい 以上でフォームはおわりにします。 レポートデザインは手付かずですが ここにも課題が山積しています。 しかしここではお許しください 一方的な回答が続きましたが、 今後はあなたの補足に答える形で進めたいと思います 何なりとご質問下さい

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.9

こんにちは、過去の回答を見直しましたが、誤字が多く、 文面も解り難いのに驚きでした。よくお付合い頂いたと感謝しております。 これを踏まえ、流れの中に注釈を字下げして加えました、流れの中で▼で始まるものは、ツールではなく通過点です。 ------- 3.3.メニューフォーム 3-3-1.プロフィールテテーブル  情報処理には企業に限らず大抵 今日、今月、今期と日付の管理が欠かせません  「期初日、期末日、月初日、月末日を最初に計算して、それぞれのフォームを条件付きで開く  プロフィールとは自己紹介の意味も含みますね、会社名、住所、電話番号、担当者、決算日  の他消費税率等の定数も含めた情報の1レコードだけのテーブルを  メニューフォームのソースレコードとします。  プロフィールテーブルのフィールド   ・期初月   ・税率   ・税率期限   ・期限後税率   ・郵便番号   ・市区町村名   ・字番地   ・担当者   ・電話番号  またフォーム、レポートの種類が増えるとナビゲーションウィンドだけでは大変です。  これら多数のモジュールを呼び出すボックスを1画面にまとめたメニューフォーム 3-3-2.メニューフォーム作成  ▼作成→フォームデザイン→▼デザイン→▼プロパティ―シート→▼データタグ→レコードソースの右端の…   クエリ画面に切り替わりテーブルのリストが表示される  →プロフィール→追加→テーブルの表示を閉じる  →*(ワイルドカード)をフィールドへ→クエリビルダを閉じる  →▼既存のフィールドの追加→表示された全てを捉まえて→詳細へドラッグ  →▼配置→表形式  →▼サイズ/間隙→自動調整    ボックッスの幅がラベルボックス内の文字列に調整される  →▼スペースの調整右端→スペース→なし  →詳細バーを10舛程度下へドラッグしてホームヘッダ領域を広げる   この領域はメニューボックスを配置します  →空白をクリックしてボックスを解放  →フォームヘッダー内の「期初月ラベル」を詳細バー迄ドラッグ  →詳細内の「期初月テキストボックス」を詳細バー迄ドラッグ  →フォームフッターバーを「期初月テキストボックス」迄ドラッグ  →フォームヘッダー内の左外の薄墨の十字を左端迄へドラッグ  →空白をクリックしてボックスを解放  →▼配置→サイズ/間隙→ここのツールのリストを駆使してテキスト幅を調整する 3-3-2-1 日付定数ボックッスの配置  →▼デザイン→フォームヘッダーの空白→完了   フォームヘッダ内にラベルボックスとテキストボックスが組で追加される  →追加されたラベルボックス→▼プロパティ―シート→書式タグ→表題を「基準日」に変更  →追加されたテキストボックス→書式タブ→書式→「gemmdd(aaa)」と入力  →その他タグ→名前を「基準日」に変更→既定値を「Date()」   このDate()はエクセルでは Today() また規定値欄には()は表示されない  →基準日のボックスをコピペ(Ctrl+C→Ctrl+V)してラベルの標題とテキストの名前を   月初日、月末日、期初日、期末日、開始日、終了日を追加  →基準日を含めた組のボックすを捉まえて→▼配置→集合形式  →▼サイズ/間隙→自動調整  →▼スペースの調整右端→スペース→なし 3-4.イベント起動用ボックッスの配置とVBA  ・命令文の集まりの最小の集まりをモジュールと呼ぶ  ・モジュールはPrivatesub() で始まりEnd Subで終わる  ・モジュール内に記述する命令文は改行または:で区切る  ・=は比較演算子と右の式の答えを左の変数の値とする    の意味があります。最初 I=I+1 に戸惑いましたが  ・VBAでは   数値定数:1234567890   数値変数:テキストボックス、DIMで宣言、暗黙の宣言   文字列定数:文字列、数字列を"で挟む "00123"   文字列変数:テキストボックス、DIMで宣言、暗黙の宣言コードの表示   時間列定数:#2019/10/31# #23:00:00# と#で挟む   時間列変数:キストボックス、DIMで宣言、暗黙の宣言   ※システムの変数の規定値は暗黙の宣言が規定値になっているが    当然のことながら氏名、名前、苗字、お名前が別々の変数として取り扱われる    変数の宣言を強制する    コーディン画面で→▼ツール→▼オプション→▼エディターの設定家→変数の宣言を強制する  VBA  ・フォームデザインから命令文記述(コーディングと呼ぶ)画面への入口は2つあります。   1.ボックス→▼イベントタブ→イベント選択   2.▼デザイン→コードの表示 3-2-2.日付の計算  日付は10進数とは違って、秒分時日月年と位上りがバラバラですね  ご存知とは思いますが整理します  今日はH10/10/31ですがこれから日の部分を引くと9月末日これに1を加えると10月の月初日  月初日に35加えて日の部分を引くと10月末日  Year(),Day(),DateValue()の3つの関数を使います    ▼デザイン→コードの表示   左右2つのプルダウンあります。左はイベントの発生源の選択で右は発生源の種類  →▼左のプルダウン→Form    Pribate Subに続いてEnd Subが表示されます。  →この間に「基準日変更RTN」と入力   基準日変更RTNはサブルーチンと呼び主文の一部を別書きにして主文を単純化と他のモジュールにも活用 -------- Option Compare Database Private Sub Form_Load() 基準日変更RTN End Sub Private Sub 基準日変更RTN() 期初日 = DateValue(Year(基準日) & "/" & 期初月 & " / " & 1) If 期初日 > 規準日 Then 期初日 = DateValue(Year(基準日) & "/" & 期初月 & " / " & 1) 期末日 = (期初日 + 370) - Day((期初日 + 370)) 月初日 = 基準日 - Day(基準日) + 1 月末日 = 月初日 + 35 - Day(月初日 + 35) End Sub Private Sub 基準日_LostFocus() 基準日変更RTN End Sub Private Sub 期初月_LostFocus() 基準日変更RTN End Sub ------ 3-2-3フォームヘッダにラベルを配置  このラベルのクッリックイベントで名前登録フォームを開きます ・メニューフォームをデザインビューで開いて、  ラベルボックスを配置し、このラベルのクリックイベントでコーディン画面に入る ▼デザイン→ラベル→フォームヘッダ内→「モジュウールを開く」と入力  →このラベルボックスをコピペ(Ctrl+C→Ctrl+V)→2つのラベルを捉まえて  →▼配置→集合形式→空白部分をクリックしてラベルを解放→上のラベルを右クリック  →▼コントロールの種類の変更→テキストボックス→▼プッロパティシート→▼書式タグ  →標題に「旗」と入力→▼その他タグ→名前に「旗」と入力   これはこの回答中に思いついた手法でメニュー画面より開かれたフォームの標題を(旗)にする下ごしらえです。   ネーミング候補はイベント名、旗手、司令塔、任命者名、的 等でしたが…  →二つ目のラベル→▼プロパティ―シート→▼その他タグ→名前に「入出庫登録]と入力  →クリック時の右端…   コーディング画面になり、Private~End sub、これを次のように完成させる ------- Private Sub 入出庫登録_Click() 旗 = "入出庫登録" DoCmd.OpenForm "入出庫登録", , , "日付 Between forms!メニュー!月始日 and forms!メニュー!月末日" End Sub ------- ・入出庫登録日次ラベル追加  入出庫登録ラベルをコピペ→標題と名前を「入出庫登録日次」に変更  入出庫登録日次を捉まえて入出庫登録ラベルの下辺に近づける(マウスカーソルの先)  ドッキングサインの線が出たらマウスを離す ------- Private Sub 入出庫登録日次_Click() 旗 = "入出庫登録日次" DoCmd.OpenForm "入出庫登録", , , "日付 =forms!メニュー!基準日" End Sub ------- ・名前登録フォームを条件なしで開くラベル追加  入出庫登録ラベルをコピペ→標題と名前を「名前登録」に変更 ------- Private Sub 名前登録_Click() DoCmd.OpenForm "名前登録" End Sub 3-2-4フォームの標題をメニューの旗にする  入出庫登録フォームをデザインモードで開く→入出庫登録ラベルを右クッリック  →▼コントロールの種類の変更→テキストボックス→▼プッロパティシート  →▼その他タグ→名前に「標題」と入力  →▼デザイン→▼コードの表示   コードの表示画面になる  →▼左のプルダウン→Form ------- Private Sub Form_Load() タイトル = Forms!メニュー!旗 End Sub

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.8

3.2.2.「名前登録」 作成リボン→フォームデザイン→プロパティ―シート →レコードソースの右端の…→Mカテゴリ  →追加→テーブルの表示を閉じる→Mカテゴリの*をフィールドにドラッグ  →フラグNo.の*(ワイルドカード)で選択しているので重複を避け、並び順の定義  →クエリビルダを閉じる→既存のフィールドの追加  →主キーのIDを除くテキストボックス全てを捉まえて詳細画面にドラッグ       移動できないときはどれか一つだけ捉まえて移動の後移動       IDはオートナンバー型でAccessで管理されます。  →詳細画面上のテキストボックス全てを捉まえて→配置→表形式    これでラベルボックッスはフォームヘッダにテキッスと    ボックスは詳細に分かれて並びますが    各ボックスはグループ化されており、    一つのボックッスの大きさを変えると他のボックスも連動します    表形式にしたときは全てのボックスが捉まえています。    このボックッス群は左端上外の薄墨色の十字マークの操作で左右にのみ    移動できます。    空白部分をクリックしてボックスを解放してどれかのボックスを    移動すると上下の移動    一つのボックスのサイズを替えると左右のボックッスは左右に    移動するためボックスどうしが重なる事はありません  →配置→スペースの調整→なし→サイズ/間隔→自動調整               ラベル上の文字列の幅に合わせる  →フォームヘッダの左上外の薄墨のクロス十字で左端までドラッグ  →空白部分をクリックでボックッスを解放  →フォームヘッダ上のカテゴリ→詳細バーまで下へ移動→  →詳細上の上のカテゴリ→詳細バーまで上へ移動  →フォームフッターバーを止まるまで上へ移動   フォームヘッダ上に標題のラベルボックッスを配置します  →デザインリボン→ラベル→フォームヘッダーの上端に「名前登録」と入力  →先に作成した名前登録サブフォームヘッダ上にドラッグ  →プロパティ―シート→データタグのリンク親フィールドの右端の… 画面が変わりリンク候補が表示される  フォームの既定のビューは単票なのでここで帳票フォームに変更します  ドッキング前に帳票にしてもドッキング時に単票にされます単票にされます 3.3.メニューフォーム  情報処理には企業に限らず大抵 今日、今月、今期と日付がア欠かせません  「期初日、期末日、月初日、月末日  またフォーム、レポートの種類が増えるとナビゲーションだけでは大変です。  次回はメニューフォームに触れて終了にしたいと思います。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.7

質問の意味を理解できてませんでした やりたい事は日付のない品物に日付けを設定したい 設定条件はフラグのある同じ品物の日付 ※ACCESSのテーブルでctrl+Cで直前のレコードの値をコピーできます 1.テーブル作成でフラグだけのテーブルを作成 2.このテーブルとinner joinでUnionさせる(これは出来ているのですね) 3.フラグのない抽出クエリ 一つの品物にフラグがオンのレコードがあったらどちらを採用しますかあ ----------------------------------------------------------------------------------------------- このようなレコードはどこから入り込むのですか 手入力、他のソフトからのインポート、何れにしてもテーッブッルの日付に値要求とすればよいのでは

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.6

こんにちは 3.フォーム作成(クエリとフォーム)   クエリには(1)選択(2)クロス集計(3)テーブル作成(4)更新(5)追加(6)削除と   ありますがフォームからクエリビルダで作成するのは(1)の選択クエリです。  ここではフォーム作成として記述します。 3.1.回答No.2の「入出庫登録」フォーム作成  (カテゴリID,名前IDは標題を空に、   右端のvはコンボボックスのプルダウン)  作成リボン→フォームデザイン→プロパティ―シート→データタグ  →レコードソースの右端の…→T入出庫→追加→M名前→追加  →テーブルの表示を閉じる  →M名前のカテゴリーIDをフィールドにドラッグ  →T入出庫の*(ワイルドカード)をフィールドにドラッグ  →日付をフィールドにドラッグ→並び替えを昇順に  →表示行のチェックを外す。添付図をご覧ください  →クエリビルダを閉じる→◎デザインリボン→既存のフィールドの追加  →回答No.2を参照してカテゴリID、名前ID、日付、入庫数、   出庫数を詳細画面にドラッグ→テキストボックス全て→◎配置リボン  →◎表形式→◎スペースの調整▼→なし→◎サイズ/間隙▼→自動調整  →◎サイズ/間隙▼→広いコントロールに合わせる  →空白箇所をクリックして→フォームヘッダ上の名前ボックスを   詳細バーまで移動→詳細内の名前を詳細バーまで移動  →フォームフッターを止まるまで上へ移動  →フォームフッターの空白部分を下端から上はドラッグして空白を消す  →デザインリボン→ラベル→フォームヘッダの左上端   これでボックスの配置は完了ですが、フィールドの幅の調整が必要です。   ボックッスの一つの幅を変化させると周りのボックッス連動します   この画面で印刷プレビューが使えます。 ファイル→印刷→印刷プレビュー  →カテゴリ→プロパティのその他タグ→タブストップをいいえ  →フォームフッターの下→プロパティの書式を帳票フォーム  →フォームを閉じる→「変更を保存」にはい→フォーム名に  「入出庫登録」と入力→OK ・上記流れの中で◎印あるのはツールではなくツールの保存場所です。  頻繁に使うツールはクイックアクセスツールバーに  登録しておくと良いでしょう  クイックアクセスツールバーの表示域が狭いですが、  下に表示するにすれば画面の横いっぱいに広がります。  プロパッティーのデータタグ内に追加の許可、削除の許可、  更新の許可がありますね、これで参照確認用、登録用と使い分けれます  また、その他タブにヒント、タブストップ、タブ移動順、   縦書きがありますこれらも有効ですヒントはここに入力しておくと   マウスカーソルを近づけるとツールと同じように表示されます。 次回はサブフォームのあるフォームの作成です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

質問の「汎用性があるSQL式」というのは、質問の例では、 「△」がついているのはりんごだけですが、これがたとえば、 フラグ ナンバー    名前  カテゴリ      日付 △     1      大根   野菜     2019/10/01 △     2      りんご  果物     2014/10/02       3      りんご  果物       4      牛肉   肉類     2019/10/03       5      大根   野菜       6      みかん  果物     2019/10/09 のようにデータを追加した場合にユニオンを使うと「△」がついた 数だけユニオン式を追加していかなくてはならないのでこれを避けたい ということだと解釈して、テーブルの名前を「テーブル1」とすれば、 SELECT Temp1.フラグ, Temp1.ナンバー, Temp1.名前, Temp1.カテゴリ, IIf(Temp1.カテゴリ = (SELECT Temp3.カテゴリ FROM テーブル1 As Temp3 WHERE Temp3.フラグ = ('△') and Temp1.カテゴリ=Temp3.カテゴリ AND Temp1.名前=Temp3.名前 AND IsNull(Temp1.日付)), (SELECT Temp2.日付 FROM テーブル1 As Temp2 WHERE Temp2.フラグ = '△' AND Temp1.カテゴリ=Temp2.カテゴリ AND Temp1.名前=Temp2.名前),Temp1.日付) AS 日付 FROM テーブル1 AS Temp1 WHERE (Temp1.フラグ) Is Null; という選択クエリで対応できます。この選択クエリはIIf関数と二つの サブクエリを内蔵しています。少々複雑ですが一応質問の意図と 見える範囲での条件で設定しています。 この場合クエリの結果は、 フラグ ナンバー    名前  カテゴリ      日付       3      りんご  果物     2014/10/02             4      牛肉   肉類     2019/10/03       5      大根   野菜     2019/10/01          6      みかん  果物     2019/10/09 のようになります。 ただし、 フラグ ナンバー    名前  カテゴリ      日付 △     1      大根   野菜     2019/10/01 △     2      りんご  果物     2014/10/02       3      りんご  果物       4      牛肉   肉類     2019/10/03       5      大根   野菜       6      みかん  果物     2019/10/09       7      りんご  果物 のようにナンバー7のりんごがある場合は、 フラグ ナンバー    名前  カテゴリ      日付       3      りんご  果物     2014/10/02             4      牛肉   肉類     2019/10/03       5      大根   野菜     2019/10/01          6      みかん  果物     2019/10/09       7      りんご  果物     2014/10/02 のようにナンバー7のりんごの日付がナンバー2のりんごの日付が表示されますが、 フラグ ナンバー    名前  カテゴリ      日付 △     1      大根   野菜     2019/10/01 △     2      りんご  果物     2014/10/02       3      りんご  果物       4      牛肉   肉類     2019/10/03       5      大根   野菜       6      みかん  果物     2019/10/09 △     7      りんご  果物     2019/10/10       8      りんご  果物 のようにナンバー7のりんごに日付があり、フラグが「△」で、 ナンバー8にりんごがあり日付が無い場合、上記のクエリを実行すると フラグ ナンバー    名前  カテゴリ      日付       3      りんご  果物     2014/10/02       4      牛肉   肉類     2019/10/03       5      大根   野菜     2019/10/01       6      みかん  果物     2019/10/09       7      りんご  果物     2019/10/10       8      りんご  果物     2014/10/02 最低でも上記のようになればいいのですが、残念ながらこの場合は エラーがでます。というのもサブクエリではレコードを一つしか 抽出できない決まりがあるからです。もしナンバー7にフラグ「△」 がなければ、上記の結果がでますが、ただし、この場合はナンバー7の 日付はどのりんごのデータに挿入するのか明らかになっていないし、 質問のデータの編集の意図がこれ以上に明らかでないので、このように りんごのデータが重複してフラグに「△」がついているものとついて いないものの組み合わせがないものとすれば上記のクエリで質問の 「汎用性のあるSQL式」の回答とします。 もし、データの編集に条件が加わるならば可能であれば回答します。 わからないところがあれば補足してください。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

今晩は 2.2.クエリビルダを活用したルックアップ  リレーションシップはExcelにはない最大の長所だと思います。  先ずは添付図をご覧ください。  ・M名前がMカテゴリにリレーションシップで繋がっています。  ・これはご存知のクエリですね、タグはT入出庫クエリビルダ―とありますが  ・リレーションシップの繋がり方には「完全整合性」と   「どちらか一方を主」としたものがあります。   前者は一方のテーブルの主キーフィールドとこれを受ける   他方のフィールドとのつながりで   他方の全てのレコードは一方のレコードを1意で1:∞の関係になります。   この完全整合性以外ははぐれ物のレコードがあり、   システムに訳の分からない不都合をおこします。   はぐれ物がレコードの有無を調べるとき以外はダメです  ・∞側のレコードから1側のレコードが1意決まり、   1側の全てのフィールドを参照できます。  ・ややこしいですね   学校の生徒名簿テーブル(ID,生徒名、住所、家族ID)に         家族テーブル(ID,家族名、続柄、所帯主F)   をリレーションすると家族の住所録にもなります ---------------------------------------------------------------------------------------------- 2.2.1.T入出庫の名前IDにMカテゴリをルックアップ設定  T入出庫→カテゴリID→ルックアップ→表示コントロールの右端  →コンボボック→値集合ソースの右端の…   クエリビルダが起動します  →クエリビルダ内を右クリック→テーブル表示→M名前をダブルクリック  →Mカテゴリをダブルクリック  →テーブルの表示を閉じる  →各フィールドを赤矢線を参考にドラッグ  →フラグNo.とフリガナの表示を外す ・M名前のカテゴリIDの標題に「カテゴリ」することをお忘れなく ようやく下ごしらえが終わりです。 次はフォームの作成に入ります。 フォームにはフォームには単票形式(規定値)と帳票形式がありますが 登録用には、1レコードを1行とする帳票形式が登録作業の効率が上がります。 ----------------------------------------------------------------   

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

コメント有難うございます。 早速テーブルデザインからはじめます。 回答No.1の添付図のリレーションシップの各テーブル第一項目のIDはデザインの終了で 主キーとして追加されます。 ・テーブル設定  フィールドのプロパティー設定に移ります  これから先はフィールド名の手入力以外はマウス操作だけで進みます。 1.Mカテゴリー作成 1-1.カテゴリのプロパッティー  作成リボン→テーブルデザイン  これでフィールド名が空白のフィールドのプロパティの編集画面になります  →フィールド欄に(1)「カテゴリ」と入力   データ型が短いテキストになります  →(2)値要求はい→(3)インデックス重複なし→(4)IME入力モードひらがな 1-2.フラグNo.のプロパティー  次の行のフィールド欄に「フラグNo.」と入力し、  →(5)データ型の右端からデータ型を数値にすると   フィールドのプロパティーは数値型のプロパティになり                   →(6)書式はExcel同じでge/mm/dd(aaa)も可能です  →(7)入力規則に(>99)and (<1000)とすると3桁の数値 1-3.デザインビューを閉じると対話が始まります。  全てはいで、テーブル名に「Mカテゴリー」とします。 2.M名前作成  ほかの項目1.と同じで省略しますが  MカテゴリとM名前は「Mカテゴリ.ID」と「M名前.カテゴリID」が  リレーションシップで親子関係になっています。  名前が「大根」のカテゴリは「野菜」この逆の「野菜」は「大根」であると特定できませんね  カテゴリIDから野菜を参照する設定をルックアップと呼びます。 2.1.M名前のカテゴリIDにMカテゴリをルックアップする  →(8)フィールドに「カテゴリID」と入力データ型はオートナンバー型と同じ長整数型  →(9)ルックアップ  →(10)表示コントロールのテキストボックスをコンボボックッスに変更  →(11)右端クリックからMカテゴリを選ぶ  →(12)連結列 1(カテゴリの1番目のフィールド)  →(13)列数 2(カテゴリの1番目と2番目、即ちIDとカテゴリ)    T入出庫の名前IDのルックアップは    連結列のカテゴリIDの他カテゴリ、名前、フリガナと複数の項目表示出来ます  →(14)列幅0 1番目のフィールドは表示不要  →(15)リスト行数:コンボボックスの行数42行(対象レコード数700件)  →(16)リスと幅:入力フィールドの幅以上が表示しきれないときに指定     T入出庫の名前IDのルックアップにカテゴリと名前を表示すると検索効率が上がります  →(17)標題:「カテゴリ」と入力     Mカテゴリにリレーションシップするために長整数型ですが、     表示されるのはカテゴリです。 今回はここ迄ですが (13)列数については 2-2.T入出庫のルックアップとして回答No.を改めます

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

>フラグ ナンバー 名前 カテゴリ 日付  1 大根 野菜 10/1  3 りんご 果物 10/2  4 牛肉 肉類 10/3  このようにselectで表示させたいのですが ★日付順に表示させるということですね  並び替え機能はテーブル作成時点で備わっています。  またクエリまたはフォーム内のクエリビルダから設定することができます。 >自分が考えたのは果物だけのテーブルを作り、  表示させたいようにinner joinで果物のりんご同士を結合させ日付は  果物以外のテーブルとUnionさせたのですが ★Unionはよく分かりませんがリレーションシップで十分です >△のを表示させるように作り ★意味不明です >もう少し汎用性があるものへ昇華させたい ★添付図をご覧下さい。  上下に分かれていますが、上段の左端のO昇華がそちらの形状かと  これを Mカテゴリ、M名前、T入出庫の3つに分けます。   フラグNo.をMカテゴリに入れましたがM名前かも  テーブルを軽んじてはいけません。  ・データ型・標題・インデックス(重複の有無)・IME変換・ルックアップ   これらの設定はクエリ、フォーム、レポート作成時に反映されます  下段はフォーム例です。クエリビルダ内で日付けを昇順にしているので  日付を前後に入力しても閉じて、再度開くと日付順に表示されます。 >昇華させたい ★もしこの回答に関心をお持ちなら、コメント下さい。  お付き合いさせて頂きます。

yyoshii
質問者

お礼

ありがとうございます! アドバイスを試してみます

  • cse_ri3
  • ベストアンサー率25% (165/640)
回答No.1

えーと、手元に実行可能なデータベースが無いので、あくまで机上での試算です。 複雑なsqlを記述したい時、仮装テーブルの概念を入れると比較的理解しやすいです。 今回の場合、まず果物だけを取り出すsqlを記述します。 Select * from 実テーブル where 名前=果物 as tbl_1 Tbl_1が仮装テーブル名です。 そして仮装テーブルを組み合わせて、unionで結合します。 Select tbl_1.* from Select * from 実テーブル where 名前=果物 as tbl_1 Union Select tbl_2.* from Select * from 実テーブル where 名前 !=果物 as tbl_2 文法の細かいミスは修正して下さい。 仮装テーブルを使いこなせるようになると、かなり複雑な処理もsqlで記述できるようになります。 詳しくは「sql」「select」「仮装テーブル」でググって下さい。

yyoshii
質問者

お礼

お礼が遅れまして申し訳ございませんでした ありがとうございます アドバイス通り実行してみました

関連するQ&A

  • SQLの質問

    ※前質問は間違いました為、再度、質問させて頂きました。 以下のようにテーブルにレコードが登録されていたとします。 顧客テーブル(customer) 客No. 名前 1 鈴木 2 佐藤 3 高橋 4 田村 5 長谷川 登録テーブル(reserve) 客No. 日付 フラグ 1  2007-05-05   1 1  2007-05-06   2 2  2007-06-05   1 3  2007-05-30   1 5  2007-05-25   2 このとき、以下のような結果を表示させたいのですが どのようなクエリを作成すればよろしいのでしょうか。 客No. フラグが1であったレコード数 1   1 2   1 3   1 4   NULL 5   0 ※客No4は登録テーブルに存在しなかった為 NULLと表示させたいです。 何卒宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • SQLの条件検索について

    下記のような「果物TBL」というテーブルがあるとします。 果物TBL -------------------------------- ID    名前      値段 - - - - - - - - - - - - - - - - - - - - 01    りんご     150 02    バナナ     250 03    みかん     250 04    ぶどう     300 -------------------------------- また上記のテーブルと全く同じ構成の「果物検索TBL」というテーブルがあるとします。 そのテーブルには、例として下記のような値を入れておきます。 果物検索TBL -------------------------------- ID    名前      値段 - - - - - - - - - - - - - - - - - - - - NULL   りんご     250 NULL   バナナ     NULL -------------------------------- この時、下記のようなSQLだと SELECT DISTINCT 果物TBL.名前 FROM 果物TBL INNER JOIN 果物検索TBL ON (果物TBL.ID = 果物検索TBL.ID AND LEN(果物検索TBL.ID) > 0) OR (果物TBL.名前 = 果物検索TBL.名前 AND LEN(果物検索TBL.名前) > 0) OR (果物TBL.値段 = 果物検索TBL.値段 AND LEN(果物検索TBL.値段) > 0); -------------------------------- 名前 - - - - - - - - - - - - - - - - - - - - バナナ みかん りんご -------------------------------- という結果になります。(名前:りんご・バナナと値段:250のOR検索) その結果を -------------------------------- 名前 - - - - - - - - - - - - - - - - - - - - バナナ -------------------------------- という結果にするにはどうすればいいでしょうか?(名前:りんご・バナナと値段:250のAND検索、バナナのみマッチ) 単純にORをANDにしてもうまくいきませんでした。 動的にSQLを作れれば良いのですが、この構成は変えられないのでNULL値がネックになり分かりません。 教えてください。 また、記載してるSQLよりもっとスマートな書き方があれば教えてください。

  • SQLでグループ化して降順表示がうまくいきません

    個人的にMysql、php環境でサイトを作っております。 そこで、素人質問で申し訳ありませんが、SQLでお伺いしたい点があります。 例えば下のようなテーブルがあります。 ▽果物テーブル 果物ID | 果物名 | 売れた日付 1 | リンゴ | 2008/11/1 2 | みかん | 2008/11/2 3 | みかん | 2008/11/3 4 | リンゴ | 2008/11/4 これを、 『最近売れた』果物順に、『グループ化』して並べ替えたいと思い、 下記のようなsqlを組みました。 $sql = "SELECT 果物名, FROM 果物テーブル GROUP BY 果物名 ORDER BY 売れた日付 DESC"; 意図としてはリンゴ、みかんの順に並べ替えたいのですが、 みかん、リンゴの順に表示されてしまいます。 想像では、グループ化したとき、古い日付の方が残ってしまい、 | リンゴ | 2008/11/1 | みかん | 2008/11/2 この部分を対象にして日付を降順にしてしまうからだと思うのですが、 これをうまく解決する方法が分かりません。 MSアクセスなどですと先に二重にクエリをかけるなどすることで 「先に降順で並べ替えたクエリを出し、その後グループ化させる」 など処理が簡単なのですが、phpではどうするのかいまひとつ分からず・・・ 申し訳ありませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • Excelでこのような集計はどうしたらいいですか?困ってます!

    こんにちは。 以下のような集計を行いたいのですが、どうすればよいかわかりません。教えてください!! Sheet(1) A列、B列、C列 カテゴリ、数、品名 =================== 野菜、1、大根 野菜、2、ねぎ 果物、2、いちご 肉、3、牛肉 果物、1、りんご 肉、2、豚肉 ・ ・ ・ Sheet(2) A列、B列、 カテゴリ、金額 =================== 野菜、300 果物、300 肉、500 ・ ・ ・ 各品物は、100円均一とし、Sheet2でカテゴリ毎に必要な金額を求めます。Sheet1は、およそ1000行ほどあるので、一括で数式で求めたいのですが、どのような関数を使えばよいのかわかりません。 お願いします!

  • カテゴリと個別商品の集計SQLについて

    カテゴリと個別商品の集計SQLについて質問です。 postgresのバージョンは9.0です。 次のテーブルより ------------------------------------------ id  カテゴリ  商品名    日付       値 ------------------------------------------ 1  野菜    ホウレン草  2010-01-01  100 2  野菜    ホウレン草  2010-01-02  100 3  野菜    ホウレン草  2010-02-02  100 4  野菜    キャベツ    2010-01-02  200 5  肉      牛肉      2010-01-01  500 6  肉      牛肉      2010-01-02  500 -------------------------------------------- 下の結果を得るSQLを考えています。 月毎の値の集計 カテゴリ  商品名     1月  2月    合計   カテゴリ合計  カテゴリ合計と合計との差 ----------------------------------------------------------------------------- 野菜    ホウレン草   200  100    300    500        200 野菜    キャベツ     200    0    200    500        300 肉      牛肉      1000   0    1000   1000         0 ----------------------------------------------------------------------------- ここでカテゴリの合計とは 上の場合、 ホウレン草(300)+キャベツ(200)=カテゴリ野菜(500)、です。 クロス集計とサブクエリを使えば出来そうなのですが、カテゴリ合計を出す部分の SQLが思いつきません、よろしくお願い致します。

  • チェックボックスの値に応じてPHP内でSQLを発行する方法

    HTML検索フォームにチェックボックスを複数設け、チェックが入ったら チェックされているもの同士をORで結んだものを、他の検索キーとANDで結ぶ SQL文を発行したいのですが。 これを効率的に行う方法を、以前に本掲示板でご教示いただきました。 <input type="checkbox" name="food[]" value="1">果物 <input type="checkbox" name="food[]" value="2">野菜 <input type="checkbox" name="food[]" value="3">肉類 if(is_array($_POST['food'])) { $sql .= " AND ("; $i=0; # 「or」 をつけるフラグ foreach($_POST['food'] AS $food_code) { if ($i) { $sql .= " OR "; } $sql .= "MYTABLE.MYFOOD = '$food_code'"; $i++; } $sql .=")"; } これを応用し、MySQLのMYTABLE.MYFOODに次のようなレコードが登録されているとして、 果物―みかん 野菜〔にんじん〕 野菜(キャベツ) 肉類【豚バラ】 果物~りんご  : これら先頭2文字を切り出して(あるいは「LIKE '肉類%'」のように、~で始まる、 でもいいです)真偽を評価したいです。 その際、果物と肉類にチェックが入ったと仮定して AND (SUBSTRING(MYTABLE.MYFOOD,1,4) = '果物' OR SUBSTRING(MYTABLE.MYFOOD,1,4) = '肉類') としてみたら、合致するものだけをうまく抽出できたのですが、 このようなロジックを冒頭のPHPコードに組み込むにはどう書いたらいいでしょうか? なお、果物5種類、野菜3種類、肉類7種類と、いずれも有限ですので、 SQL文をベタ書きすることは十分可能だと思っています。

    • ベストアンサー
    • PHP
  • エクセル グループごとの検索について

    グループごとを検索し、その情報を縦列に表示したいのですが、悩んでおります。 横に表示するのは、以下の関数を使って出来たのですが、 =IF(ISNA(MATCH(COLUMN(A4)&$A4,sheet1!$E$2:$E$700,0)) これだと使い勝手が悪く、困っております。 例えば (sheet1)の情報を、 品種    品名   金額  産地    果物    りんご1 200 津軽 果物1 果物    りんご2 250 むつ 果物2 果物    みかん  300    果物3 果物    ぶどう  400    果物4 ーーーーーーーーーーーーーーーーーーーーーーーー 海外果物  パパイヤ 300    海外果物1 海外果物  アドカボ 100    海外果物2 海外果物  バナナ  130    海外果物3 ーーーーーーーーーーーーーーーーーーーーーーーー 野菜    なす   100    野菜1 野菜    にんじん 200    野菜2 野菜    きゃべつ 300    野菜3 野菜    大根   150 練馬 野菜4 野菜    大根2  180 京都 野菜5 (sheet2)において [A]又は[B]のある位置のセルに、品種(この場合、野菜)を打ち込むと、    [ A ] [ B ]なす   100        にんじん 200        きゃべつ 300        大根   150 練馬     大根2  180 京都   このように、品名と値段、産地が縦に並んで欲しいのです。 どうぞお知恵を貸して下さいませ。 宜しくお願いします。

  • <li>内の<ul>を横に表示する方法

    <li>内の<ul>を横に表示する方法がわからずに困っています。 例えば <ul> <li>野菜 <ul> <li>大根 <li>にんじん </ul> </li> <li>果物 <ul> <li>りんご <li>バナナ </ul> </li> </ul> これを以下のように表示させたいのです。 ・野菜   ・大根        ・にんじん ・くだもの ・りんご        ・ばなな この場合、CSSはどのように記載すればいいのでしょうか。 ご存知の方、ご教授頂けると幸いです。

    • ベストアンサー
    • HTML
  • Excelでの全通りの組み合わせ出力方法2

    こんにちは。 http://okwave.jp/qa/q4122783.html にあった質問より、もう少し複雑な組み合わせを出力したいと思っています。 例えば 【肉類】として 牛肉 豚肉 鶏肉 魚肉  の中から2つ選び 【根菜】として 大根 にんじん たまねぎ サツマイモ の中から2つ選び 【葉野菜】として キャベツ 白菜 キャベツ レタス ほうれん草 の中から2つ選ぶ、 といった場合の全ての組み合わせを 【肉類】【根菜】【葉野菜】の列、または 【肉類1】【肉類2】【根菜1】【根菜2】【葉野菜1】【葉野菜2】の列に出力する事は出来るものでしょうか? 組み合わせ例としては、 牛肉、魚肉、大根、たまねぎ、レタス、ほうれん草 のような感じです。 実際に使用したい選択肢の総数が100個ほどあり、手入力には多すぎるので なんとかExcelで出来たらと思ってるのですが……。  ご存知の方がいらっしゃいましたらご教授下さい!

  • 複数キーが存在する場合のIN演算子

    閲覧ありがとうございます。 「IN演算子、複合キー」 等で検索を行いましたが、知りたい情報を見つけ切れなかったので投稿させていただきました。 SQLserver2005でのWhere句の書き方について悩んでます。 以下のテーブルからのデータを取得する方法、ご解答いただければ幸甚です。 食べ物テーブル 名前|品種|ID|ジャンル| ------------------------ りんご|品種1|001|果物| りんご|品種2|002|果物| ごぼう|品種1|003|野菜| ごぼう|品種2|004|野菜| IDはユニークとなっていて、 主キーは「名前」と「品種」で複合キーになっているとします。 クエリで、特定の1行を複数同時に取得したいと考えてます。 ◆IDを条件とする場合 IN演算子を使う  where IN('001','002','004') と指定 期待値: りんご|品種1|001|果物| りんご|品種2|002|果物| ごぼう|品種2|004|野菜| 検索結果: りんご|品種1|001|果物| りんご|品種2|002|果物| ごぼう|品種2|004|野菜| ◆「名前」「品種」を指定する場合 IN演算子を使う  where IN('りんご',ごぼう) and IN('品種1','品種2') 期待値: りんご|品種1|001|果物| りんご|品種2|002|果物| ごぼう|品種2|004|野菜| 検索結果: りんご|品種1|001|果物| りんご|品種2|002|果物| ごぼう|品種1|003|野菜| ごぼう|品種2|004|野菜| 当然といえば当然なのですが、 期待値の通りに取得するには以下のように記述するしかないのでしょうか。 Where (名前 = 'りんご' and 品種 = '品種1') or (名前 = 'りんご' and 品種 = '品種2') or (名前 = 'ごぼう' and 品種 = '品種2') . . . . 取得したい行が増えれば増えるほど 記述が億劫になってきました。。。 ほかにいいクエリの記述方法があれば教えてください。 Oracleであれば、良い具合に 複合キーの同時指定をできると聞いたのですが、SQLserverには存在しないのでしょうか? よろしくお願い致します。

専門家に質問してみよう