• ベストアンサー

項目値の連結...?

いつもお世話になってます。 つい先日も助けていただいたのですが、また困ったことになってしまいました。 何回も聞くのもどうかと思い、4日程悩みましたがお手上げになってしまいました。 [DATE1][DATE2][DATE3]にそれぞれ日付が入っています。 [DATE1]に日付が入っていたら'りんご'、[DATE2]に日付が入っていたら'みかん'、[DATE3]に日付が入っていたら'かき'と、1つの項目に(新しい項目?)集約して表示させたいです。 実際のデータ ------------------------ ID、DATE1、DATE2、DATE3 ------------------------ 1、2005/10/11、空、空 2、空、空、2005/10/15 3、空、2005/10/12、2005/11/1 4、空、2005/10/20、空 ------------------------ 出したいデータ ----------------- ID、新規項目 ----------------- 1、りんご 2、かき 3、みかん・かき ← 4、みかん ----------------- ID3のように集約させるのが難しくてできません。 下記のようなSQLを以前教えていただいたので、やってみましたが、[DATE2][DATE3]のようにだぶっている場合は対応できません。 select ID,case when DATE1 <> '' then 'りんご' when DATE2 <> '' then 'みかん' when DATE3 <> '' then 'かき' end as 新規項目 from TABLE1 こういう場合、どういうSQLを書けば良いでしょうか? よろしくお願いします。

  • ha3y
  • お礼率80% (12/15)

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

  • ベストアンサー
  • 7marine
  • ベストアンサー率36% (59/160)
回答No.3

ANo2さんのおっしゃるとおり 非正規系になるのが問題かと。。 ANo1をあえて少し改良するとこんな感じですかね。 検証はしてません select ID, replace(  'アタマ' +  case when DATE1 is NULL then '' else '・りんご' end +  case when DATE2 is NULL then '' else '・みかん' end +  case when DATE3 is NULL then '' else '・かき' end +  ・・・  case when DATE8 is NULL then '' else '・ばなな' end ,  'アタマ・','') as 新規項目 from TABLE1

ha3y
質問者

お礼

7marineさん、ありがとうございます。 k_o_r_o_c_h_a_nさんのコードに少し手を加えただけで、かなり分かりやすくなるんですね。 どうも、ありがとうございます。 お二人のコードを参考にさせていただいて、無事完成できました。 本当にありがとうございました!

その他の回答 (2)

回答No.2

>てことで、べたべたでもできますが、かなりわかりにくくなりそうな予感です。 非正規なテーブルが故の業(ごう)です。 >これ以外に方法はないものでしょうか。 テーブルを設計しなおすのが、最良の方法かと思います。

ha3y
質問者

お礼

そうですね。 でも、項目を分けて日付を持つという事も必要なので、私個人の見解で勝手にDBの構造を変更するわけにもいかず...。苦しいですね。 ありがとうございました。

回答No.1

項目の集約の際、間に'・'を挟むことに、難儀しているということでしょうか。 select ID, case when DATE1 is NULL then '' else 'りんご' end + case when DATE2 is NULL then '' when DATE1 is NULL then 'みかん' else '・みかん' end + case when DATE3 is NULL then '' when DATE1 is NULL and DATE2 is NULL then 'かき' else '・かき' end as 新規項目 from TABLE1 べたべたの判断式ですが・・・こんな感じで出来なくはないでしょう。

ha3y
質問者

お礼

k_o_r_o_c_h_a_nさん、ありがとうございます。 できました! が...、実はDATE項目はあと5つあり、全部で8つになります。もしかしたらさらに増えるかもしれません。 てことで、べたべたでもできますが、かなりわかりにくくなりそうな予感です。 これ以外に方法はないものでしょうか。

関連するQ&A

  • エクセル2010で 項目の抜き出しをしたい

    エクセル2010で 項目の抜き出しをしたいです。 たとえば、A列に りんご りんご バナナ トマト りんご バナナ みかん トマト メロン バナナ リンゴ みかん ぶどう とデータが入っているとき、これらのデータには、 トマト バナナ りんご リンゴ みかん メロン ぶどう という種類のデータが入っているということを簡単に表示する方法が知りたいです。 どうぞよろしくお願いします。

  • MySQLで、日付最大のレコード抽出

    MySQLをJAVAで使っています。 指定キーの中で、一番日付の大きなレコード項目全てを 取り出したいのですが、 下記SQLだと、何も抽出されません。 (今朝、ここで教えて頂いたSQL文です) 何が間違っているのでしょうか? さらに、もっと簡単なSQL文はないでしょうか? SELECT * FROM food WHERE (food_id = 1) AND (food_name = 'みかん') AND (karute_id = (SELECT MAX(date) FROM food WHERE (food_id = 1) AND (food_name = 'みかん'))) 与える検索キー項目は、food_id=1, food_name=みかん foodテーブル例 food_id  food_name   date --------------------------------- 1     みかん    2015-01-01 1     みかん    2015-02-01 1     みかん    null 1     みかん    2015-04-01 2     きんめだい  2015-01-01 2     じんたん   2015-02-01 2     コロッケ   2015-02-01

    • ベストアンサー
    • MySQL
  • レコードを指定項目の数値分取得する

    OracleのSQL文について質問させて頂きます。 以下のようなテーブルが存在するとします。 ID  品名  個数 001 みかん 1 002 りんご 2 003 ぶどう 2 このテーブルから、以下のような結果を取得したいのです。 ID  品名  個数 001 みかん 1 002 りんご 2 002 りんご 2 003 ぶどう 2 003 ぶどう 2 個数の数だけレコードを返す形です。 どういうSQLを組めばよいのか、わかりません。 お手数ですが、どなたかわかる方いらっしゃいましたら ご回答頂けますと幸いです。よろしくお願い致します。

  • MySQLで、日付最大のレコード抽出

    MySQLをJAVAで使っています。 指定キーの中で、一番日付の大きなレコード項目全てを 取り出したいのですが、 下記SQLだと、何も抽出されません。 何が間違っているのでしょうか? さらに、もっと簡単なSQL文はないでしょうか? SELECT * FROM food WHERE (food_id = 1) AND (food_name = 'みかん') AND (food_id = (SELECT MAX(date) FROM food WHERE (food_id = 1) AND (food_name = 'みかん'))) 与える検索キー項目は、food_id=1, food_name=みかん foodテーブル例 food_id  food_name   date --------------------------------- 1     みかん    2015-01-01 1     みかん    2015-02-01 1     みかん    null 1     みかん    2015-04-01 2     きんめだい  2015-01-01 2     じんたん   2015-02-01 2     コロッケ   2015-02-01

    • ベストアンサー
    • MySQL
  • エクセルで項目抽出

    エクセルで下記のような表から項目を抽出したいのですが うまくいきません A列 りんご みかん りんご ぶどう みかん と入力されていて任意のセルに、A列に入力されている項目から 重複分を除き抽出したいです 具体的には任意セルに「りんご、みかん、ぶどう」と抽出したいのです。 オートフィル機能を使いやってみましたが、 A列に後からデータを追加すると追加データまでは拾えませんでした。 よろしくお願いいたします

  • SQL CASE 文について

    開発環境 SQLSERVER VB2005 SQLのCASE文についての質問ですが、DATE型のデータが有効値の場合は”スペース”それ以外の場合は格納されているDATE型を表示したいのですが、どなたかご教授お願いいたします。下記のSQLでは全ての日付が出てしまいます。 SELECT CASE 日付 WHEN '2000/01/01' THEN ' '     ELSE 日付          END AS Expr1 FROM  テーブル CASE文以外でもできますか? よろしくお願いいたします。

  • Excelについて

    Excelに下記のようなデータが入っているのですが A列   |   B列 りんご |     2 みかん | 3 ばなな | 1 りんご | 6 すいか | 7 かき | 3 みかん | 4 すいか | 8 りんご | 1 *(実際には100件ぐらいのデータが入っています。) A列で同じ「りんご」があれば、同じ行にあるB列の値を合計したいのでがどうすればよいですか? また「りんご」だけでなく他にもあればその値を合計して出したいのですが。 例えば、今回の例では「りんご」が三箇所あるので「2+6+1]で9と表示したいのですが。 イメージとしては、 A列  |   B列 |   C列   |  D列 りんご |    2  |    りんご |  9 みかん |    3  |    みかん | 7 ばなな | 1  |    ばなな | 1 りんご | 6  |    すいか | 15 すいか | 7  |    かき | 3 かき | 3 | みかん | 4 | すいか | 8 | りんご | 1 | というようにしたいです。どなたか教えてください。

  • 1つのSQL文で文字列を置換する方法を教えてください。

    以下のようなテーブルで、項目aに入力されているデータに含まれている[aaaa]を[bbbb]に置き換えたいのですが、どなたか1回で置き換えられるSQL文を教えていただけないでしょうか。 どうぞ、宜しくお願い致します。 table:TEST [項目名]/[データ]  a / aaaaみかんりんご ■変換後■ [項目名]/[データ]  a / bbbbみかんりんご

  • 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 ピボットテーブル項目を表示させたい

    ピボットテーブルで、集計をした場合に下記表の項目(1)の行に同じ名前を表示させることはできますか? Excel2003です 項目(1) 項目(2) 3月 累計  りんご 金額  100  400  個数   10 40  単価 10 10 みかん 金額 300 1200  個数 15 60  単価 20 20              ↓ 項目(1) 項目(2) 3月 累計  りんご 金額  100  400 りんご 個数   10 40 りんご 単価 10 10 みかん 金額 300 1200 みかん 個数 15 60 みかん 単価 20 20 ピボットテーブルの集計後並べ替えたり、するのに必要です。 ご存知の方教えて下さい!