- 締切済み
横並びのコード管理を別テーブルからコードと名称を取得するには?
例えば、 [品物管理テーブル] cd:name 01:スナック菓子 02:ジュース 03:アイス 04:ガム ・ 99:その他 と [店舗別売り上げランキング管理テーブル] shop:no1:no2:no3 A店: 03: 01: 04 B店: 01: 02: 04 C店: 02: 01: 03 D店: 02: 01:null があった場合に A店の売り上げ順に[品物管理テーブル]のcdとnameを取得したい場合は どのようにすればよいのでしょうか? SELECT cd, name FROM [商品管理テーブル] AS syo LEFT JOIN [店舗別売り上げランキング管理テーブル]AS ran ON syo.cd=ran.no1 OR syo.cd=ran.no2 OR syo.cd=ran.no3 WHERE ran.shop='A店'; とすると、ランキングを無視して[品物管理テーブル]の順で 01:スナック菓子 03:アイス 04:ガム と返ってきてうまくいきません。
- ramen41201
- お礼率100% (3/3)
- PostgreSQL
- 回答数2
- ありがとう数5
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- baunce
- ベストアンサー率66% (2/3)
品物管理テーブル・・・・t1 店舗別売り上げランキング管理テーブル・・・t2 とします。 以下でどうでしょうか? select shop,no as 店内順位,cd,name from ( select shop,1 as no,no1 as rk from t2 union all select shop,2 as no,no2 as rk from t2 union all select shop,3 as no,no3 as rk from t2 ) as v left join t1 on v.rk = t1.cd order by shop,no
- chukenkenkou
- ベストアンサー率43% (833/1926)
ここはPostgreSQLのカテゴリなのですが、使用しているRDBMSは合っていますか? 表名、列名などが予約語と一緒だったり、特殊文字を含んでいる場合でも名称として使用できるように [テーブル1] [カラム1] といった囲み方をするのは、SQL ServerやMS-ACCESSなど、マイクロソフト製品の独自仕様なのですけど? 具体的なSQLを提示する上で、便宜上、囲っているだけですか? >ランキングを無視して[品物管理テーブル]の順で 「ランキング順で返して」とSQLで指定していないのですから、返って来る順序は不定(RDBMSの内部処理や物理的な格納位置などによって、どうなるか分からないし、RDBMS側で保証もされない)です。 これは、標準SQLの規格上もそうだし、殆どのRDBMSによる実装でも同じです。 返って来る順序を保証させたいなら、「order by」で明示的に指定してください。
お礼
早々の回答ありがとうございました。 テーブルを[]で括っているのは、テーブルとカラムを分かりやすく分けたかっただけです。 また、ORDER BYは試しましたが、希望する戻り値ではありませんでした。 SELECT cd, name FROM [商品管理テーブル] AS syo LEFT JOIN [店舗別売り上げランキング管理テーブル]AS ran ON syo.cd=ran.no1 OR syo.cd=ran.no2 OR syo.cd=ran.no3 WHERE ran.shop='A店' ORDER BY ran.no1, ran.no2, ran.no3;
関連するQ&A
- 累積テーブルへのバックアップ方法について
OracleでのデータバックアップをSQLにて作成しようとしています。 【処理内容】 売上テーブル(URITBL)から売上累積テーブル(URIRUITBL)へ ※売上年月がシステム日付より12カ月以上前(2010年8月以前) AND 領収済みのものを 売上テーブルから売上累積テーブルへ追加し、 売上テーブルにあったデータは削除する 売上明細テーブル(URIMTBL)と売上明細累積テーブル(URIRUIMTBL)へ ※売上年月システム日付より12カ月以上前(2010年8月以前) AND 領収済みのものを 売上明細テーブルから売上明細累積テーブルへ追加し、 売上明細テーブルにあったデータは削除する 【テーブル内容】 売上テーブル(URITBL)更新前 支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ(※領収済…'1'、領収未…SPACEです) STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG 001 000012 201006 A田太郎 123-1234 1 001 000012 201007 A田太郎 123-1234 001 000012 201008 A田太郎 123-1234 1 001 000012 201009 A田太郎 123-1234 1 001 000012 201010 A田太郎 123-1234 1 002 000101 201006 B田二郎 345-5678 002 000101 201007 B田二郎 345-5678 1 002 000101 201008 B田二郎 345-5678 1 002 000101 201009 B田二郎 345-5678 002 000101 201010 B田二郎 345-5678 1 売上明細テーブル(URIMTBL)更新前 支店CD、顧客NO、売上年月、売上金額 STNCOD、KKKNO、URIYM、URIKIN 001 000012 201006 1,000 001 000012 201007 2,000 001 000012 201008 3,000 001 000012 201009 4,000 001 000012 201010 5,000 002 000101 201006 500 002 000101 201007 1,500 002 000101 201008 2,500 002 000101 201009 3,500 002 000101 201010 4,500 売上テーブル(URITBL)更新後 支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG 001 000012 201007 A田太郎 123-1234 001 000012 201009 A田太郎 123-1234 1 001 000012 201010 A田太郎 123-1234 1 002 000101 201006 B田二郎 345-5678 002 000101 201009 B田二郎 345-5678 002 000101 201010 B田二郎 345-5678 1 売上明細テーブル(URIMTBL)更新後 支店CD、顧客NO、売上年月、売上金額 STNCOD、KKKNO、URIYM、URIKIN 001 000012 201007 2,000 001 000012 201009 4,000 001 000012 201010 5,000 002 000101 201006 500 002 000101 201009 3,500 002 000101 201010 4,500 売上累積テーブル(URIMTBL)更新後 支店CD、顧客NO、売上年月、氏名、TEL、領収済フラグ STNCOD、KKKNO、URIYM、NAME、TEL、RYOFLG 001 000012 201006 A田太郎 123-1234 1 001 000012 201008 A田太郎 123-1234 1 002 000101 201007 B田二郎 345-5678 1 002 000101 201008 B田二郎 345-5678 1 売上明細累積テーブル(URIMRUITBL)更新後 支店CD、顧客NO、売上年月、売上金額 STNCOD、KKKNO、URIYM、URIKIN 001 000012 201006 1,000 001 000012 201008 3,000 002 000101 201007 1,500 002 000101 201008 2,500 売上テーブル(URITBL)から売上累積テーブル(URIRUITBL)へ追加のSQL、売上テーブル(URITBL)の削除のSQLは以下の2つではないかと思います。 INSERT INTO URIRUITBL SELECT * FROM URITBL WHERE RYOFLG='1' AND ( URIYM < ADD_MONTHS (SYSDATE, -12) ) ; DELETE FROM URITBL WHERE RYOFLG=1 AND ( URIYM < ADD_MONTHS (SYSDATE, -12) ) ; ただ、売上明細テーブル(URIMTBL)と売上明細累積テーブル(URIRUIMTBL)へ追加のSQL、売上累積テーブル(URIMTBL)の削除のSQLはどうやってコーディングしたら良いのか悩んでいます。上記と同じように作っていくので大丈夫なのか、それとも別関数を使って作っていくのか、SQLの本などを半日ほど費やして調べてるのですが、いまだ至っておりません。最悪な時は別プログラムでとも考えているのですが、納期間近でできればSQLで解決したいと思いながら苦戦しています。 以前もこちらで教えて頂いてるのでたびたびの質問で恐縮ですが、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。
- 締切済み
- Oracle
- ドメイン情報管理テーブル作成の仕方
◆やろうとしていること 現在エクセルで管理している40個ほどのドメイン情報を、Webで管理(検索・更新・削除)する簡易システムをデータベースとPHPの勉強をかねて構築しようとしています。 ※環境は、LAMPで構築しようとしております。 ◆知りたいこと ドメイン情報管理テーブルを作ろうとしているのですが、その作成の仕方について、アドバイスしていただけたらと思っています。(正規化の方法??) ◆疑問点 管理対象のドメイン情報は、重複が多いデータです。 ・同一のネームサーバで複数のドメインを管理している ・同一の業者が複数ドメインのレジストラとなっている ・同一の担当者が複数案件の担当者となっている ・同一IDで複数ドメインの管理を行っている たとえば、次のような感じです。 例) ドメイン名 レジストラ ネームサーバ 案件担当者 ID 案件情報 hoge.com お名前.com ns.bbb.jp 東京一郎 a0002 自社ECサイト hoge.jp お名前.com ns.bbb.jp 東京一郎 a0002 自社コーポレイトサイト test.jp さくらインターネット ns.bbb.jp 京都一郎 a0003 あいう社コーポレイトサイト aaa.jp さくらインターネット ns1.bbb.jp 大阪一郎 a0004 かきく社コーポレイトサイト aaa.net ムームードメイン ns1.bbb.jp 東京一郎 a0005 さしす社blogサイト bbb.net ムームードメイン ns1.bbb.jp 東京一郎 a0005 たちつ社ECサイト 現在、エクセルで上記のような情報を管理しています。 これを初学者の私なりに正規化してみると ・ドメインリストテーブル(主キーとドメイン名だけが入っているテーブル) ・案件担当者リストテーブル(主キーと案件担当者だけが入っているテーブル) ・レジストラリストテーブル(主キーとレジストラだけが入っているテーブル) ・ネームサーバリストテーブル(主キーとネームサーバだけが入っているテーブル) ・IDリストテーブル(主キーとIDだけが入っているテーブル) ※各テーブルの主キーは、ドメインリストテーブルの主キーを設定 と、知識と経験が無いため、テーブルをいちいち細かくすることしかできないのです。 そこで、このようなデータを管理するテーブルを作る場合の一般的な考え方・注意事項・コツ・ポイントなどを踏まえアドバイスをいただけたらと思い質問いたしました。 具体的に、俺だったら、こういうテーブルに分割してドメイン情報を管理する。その理由は云々、といったかたちでアドバイスいただけますと大変助かります。 よろしくお願いします。
- ベストアンサー
- MySQL
- PL/SQLでUPDATE別テーブル条件を付加する
PL/SQLでUPDATEする際、別のテーブルからの条件も付加し更新を行いたいのですが、可能でしょうか? 教えて下さい。 どうぞよろしくお願い致します。 テーブル名T_NAMEのSEI='1'の時以下のロジック処理を行いたいのです。 UPDATE T_ADRS SET DLT_FLG = '1' , USER_ID = inUSER_ID , TNMT_ID = inCOMP_ID , UPD_DT = SYSDATE WHERE RTRIM(ADR_CD) = RTRIM(strADR_CD) AND RTRIM(DATA_SY) = RTRIM(strDATA_SY) AND RTRIM(IMP_NO ) = RTRIM(strIMP_NO );
- ベストアンサー
- その他(データベース)
- データの取得方法
Aテーブル{ id char(3) not null, name varchar(10), a_no char(5), b_no char(5), c_no char(5), date timestamp } Bマスタ{ no char(5), name char(10) } 上記のようなDBがあるのですがAテーブルのa_no、b_no、c_noに入るのはBマスタのnoになります。 下記のようにデータを取得したい場合、どうすればうまく取得できるのでしょうか。 A.id, A.name, A.a_no, カラム名をname1としてB.name, b_no, カラム名をname2としてB.name, c_no, カラム名をname3としてB.name そんなに難しいことではないと思うのですが、考えれば考えるだけ頭の中でこんがらがってきて困っています。 よろしくお願いします。
- ベストアンサー
- MySQL
- テーブル結合方法について
MySQL5.1で、Table a ,Table b から、Table cのように取り出したいのですが、 SQLでSELECTする方法がわかりません。 Table b優先だけど、Table aにしかデータがない場合もあるといった感じです。 Table a No Name 1 加藤 2 佐藤 3 田中 Table b No Name 2 佐藤先輩 4 田辺先輩 Table c No Name 1 加藤 2 佐藤先輩 3 田中 4 田辺先輩 どうか、よろしくお願いします。
- ベストアンサー
- MySQL
- Accessでクエリを作った際の順番
Access2003の質問です。 以下のテーブルがあってそれらの項目を抜き出してクエリを作っています。 テーブル1 ・商品CD ・商品名 ・単価 テーブル2 ・No ・売上日 ・得意先CD ・商品CD ・数量 テーブル3 ・得意先CD ・得意先名 ・フリガナ ・郵便番号 ・住所 ・TEL ・担当者CD ・DM テーブル4 ・担当者CD ・担当者名 クエリ ・No(テーブル2) ・売上日(テーブル2) ・得意先CD(テーブル2) ・得意先名(テーブル3) ・担当者CD(テーブル3) ・担当者名(テーブル4) ・商品CD(テーブル2) ・商品名(テーブル1) ・単価(テーブル1) ・数量(テーブル2) クエリを作って、データシートビューに切り替えるとなぜか得意先CDで昇順に並んでいます。 もちろんNoで並べ替えを設定すれば、Noで並べ替わるのですが、なぜ得意先CDで昇順に並ぶのでしょうか? Noが一番左にあるので、Noで並べ替わりそうなものですが・・ 何も並べ替えを設定しないとどのような基準で並ぶのでしょうか? わかる方がいれば教えてください。
- ベストアンサー
- その他MS Office製品
- Cakephpでランキング機能の作成方法について。
Cakephpでランキング機能の作成方法について。 Cakephpで、お気に入り数順のランキング機能を作りたいと考えています。 以下のような構造でランキングを表示させたいのですが、 やり方が分からず困っています。 ■システム概要 コーヒーの紹介サイトです。 様々なコーヒーが登録されており、ユーザーは任意のコーヒーをお気に入り登録できます。 Coffeeテーブル id , name Userテーブル id , name Favoriteテーブル id , coffee_id , user_id 現在、ランキングを表示させたいページであるindex.ctpには、$this->Coffee->find();でCoffeeの情報を表示させています。 アソシエーションでUserテーブル、Favoriteテーブルの情報も取れていますが、これをお気に入り数順にソートするやり方がわかりません。宜しくお願いします。
- ベストアンサー
- PHP
- テーブルデータの絞込み条件
MySQL4.1、PHP Version 4.3.9を使用しています。 下記のような2つのテーブルA,Bから テーブルAに存在するキー(no)のデータのみ取得したいのですが、 どのようにWHERE文を書いたら一回のSQL文で取得出来るのでしょうか。 テーブルA no |name 1 |たろう 2 |はなこ 3 |じろう テーブルB no |old 1 |16 3 |18 取得したい結果テーブル no |name 2 |はなこ 良い方法が見つかりません。 宜しくお願いします。
- 締切済み
- MySQL
- SQLの書き方
select A.NO, A.NAME, count(B.TEN) FROM T1 A, T2 B GROUP BY A.NO ORDER BY 3 DESC 結果として以下のようになってほしいのですが、どのようにSQLを書けばよいのでしょうか? 結果 NO | NAME | TEN ---+------+----- 3 + 上村 + 40 1 + 吉田 + 11 2 + 浅野 + 6 T1テーブル NO | NAME ---+-------- 1 + 吉田 2 + 浅野 3 + 上村 T2テーブル NO | TEN ---+-------- 1 + 10 2 + 5 3 + 0 1 + 1 2 + 1 3 + 40
- ベストアンサー
- Oracle
- Oracle[10g]のSQL文について
ごぶさたしております。Oracle[10g]のSQL文についての 質問です。(No.???) [A]テーブルに [CODE](KEY) [CODE2] [NAME] のフィールドがあります。 A-1 B-1 NAME-1 A-2 B-2 NAME-2 A-3 B-3 NAME-3 [B]テーブルに [CODE2](KEY) [NAME-B] のフィールドがあります。 B-1 NAME-B-1 B-2 NAME-B-2 B-3 NAME-B-3 [C1]テーブルに [NO](KEY) [LINE](KEY) [CODE] のフィールドがあります。 X 1 A-1 Y 1 A-2 [C2]テーブルに [NO](KEY) [LINE](KEY) [LINE2](KEY) [BIKO] のフィールドがあります。 X 1 1 BIKO-1 X 1 2 BIKO-2 Y 1 1 BIKO-3 結果が [NO/LINE/LIN2/NAME-B/BIKO] X 1 1 NAME-B-1 BIKO-1 X 1 2 NAME-B-1 BIKO-2 Y 1 1 NAME-B-2 BIKO-3 と、なる様にしたいのです。問題は、[B]テーブルです。 今まで、教えていただいた事を参考に頑張ってみましたが、 思う結果がでません。宜しくお願い致します。
- 締切済み
- Oracle
お礼
連絡が遅くなり済みません。 baunceさんの回答で、うまく取得することが出来ました。 ありがとうございました。