- 締切済み
汎用性があるSQL式を教えて欲しいです
フラグ ナンバー 名前 カテゴリ 日付 1 大根 野菜 10/1 △ 2 りんご 果物 10/2 3 りんご 果物 4 牛肉 肉類 10/3 このような表を フラグ ナンバー 名前 カテゴリ 日付 1 大根 野菜 10/1 3 りんご 果物 10/2 4 牛肉 肉類 10/3 このようにselectで表示させたいのですが 自分が考えたのは果物だけのテーブルを作り、表示させたいようにinner joinで果物のりんご同士を結合させ日付は△のを表示させるように作り 果物以外のテーブルとUnionさせたのですが もう少し汎用性があるものへ昇華させたいとのですが考えが及びません 他にどのように表現出来るでしょうか?
- みんなの回答 (10)
- 専門家の回答
みんなの回答
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- piroin654
- ベストアンサー率75% (692/917)
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- chayamati
- ベストアンサー率41% (255/609)
- cse_ri3
- ベストアンサー率25% (165/640)
関連する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が思いつきません、よろしくお願い致します。
- ベストアンサー
- PostgreSQL
- チェックボックスの値に応じて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には存在しないのでしょうか? よろしくお願い致します。
- ベストアンサー
- SQL Server
お礼
ありがとうございます! アドバイスを試してみます