• 締切済み

データ型の変換方法

こんにちは。 前回も同じようなしつもんをしましたがまた問題点がでてきてしまったので質問します。 下記が前回の質問です。困ったことにこの『数』がvarcharなのです。 そうするとa.数とb.数をsumしているところでうまく計算してくれないみたいなのです。(文字列の連結になるようです。) できればここでint型などに一時的に変換して計算させたいのですがいい方法ありませんでしょうか? アドバイスをお願いします。 PostgresでそのIDを持っている人がどのくらいの数を持っているのかを抽出したいのです。 テーブルは下記です。 ********************************************* ★Aテーブル ID  名前  数  場所  日付 0001 みかん 1  冷蔵庫 0901 0001 みかん 4  倉庫  0901 0001 みかん 1  冷蔵庫 0901 0002 いちご 1  部屋  0901 0002 いちご 2  部屋  0801 0003 きのこ 6  倉庫  0901 ★Bテーブル ID  名前 0001 みかん 0002 いちご 0003 きのこ 0004 あいす ********************************************* となっている場合、下記SQLを実行すると select a.ID ,b.名前 ,sum(a.数 + b.数) as 数 from Aテーブル a,Bテーブル b where a.日付 >= '0901' and a.日付 <= '0901' and a.ID = b.ID group by a.ID ,b.名前 結果が 0001 みかん 2 0001 みかん 4 0002 いちご 1 0002 いちご 2 となり0001は合計6で出て欲しいのに別々に出てしまいます。 理想では 0001 みかん 6 0002 いちご 3 で出て欲しいです。 これはなぜなのでしょうか? よろしくお願いします。

みんなの回答

noname#86752
noname#86752
回答No.3

to_numberの書式はto_number(元の文字,フォーマット)です。 参考URLはマニュアルです。 大変な環境でお仕事されているようですね。ユーザと話す人がちゃんと技術的なことを説明できないような人だと開発者はつらいですよね。頑張ってください。

参考URL:
http://www.postgresql.jp/document/index.php3
noname#86752
noname#86752
回答No.2

困りましたね。とりあえずそのテーブルを作った人に「この設計おかしいんじゃないの?」と文句を言っておいてください。 試せる環境がないのですが、to_numberは使えませんか?

jun2249
質問者

補足

回答ありがとうございます。 設計者には言ってるんですが何しろプログラムをわからないような人たちが思いつきでこうしたいといったような要望が先行していて後から後から機能追加なんです。 なのでテーブルが足りないといってもわからないんですよ。ほんとに困ってます^^; to_numberは下でも書きましたがだめでした。

  • qaaaq
  • ベストアンサー率10% (2/19)
回答No.1

Postgresならto_number()関数がありますので 文字列型のデータに数値変換をかければいいでしょう

jun2249
質問者

補足

回答ありがとうございます。 それもやってみましたが ERROR: function to_number(numeric) does not exist となってできませんでした。 postgresがまだ使い始めたばかりなので確実ってわけじゃないのですがto_number()だと()の中に直接的な文字列('aaaa')などを入れないと変換してくれないわけではないのですか?

関連するQ&A

  • SQLのsum関数

    こんにちは。 PostgresのSQLが思うように動いてくれません!! そのIDを持っている人がどのくらいの数を持っているのかを抽出したいのです。 テーブルは下記です。 ********************************************* ★Aテーブル ID  名前  数  場所  日付 0001 みかん 1  冷蔵庫 0901 0001 みかん 4  倉庫  0901 0001 みかん 1  冷蔵庫 0901 0002 いちご 1  部屋  0901 0002 いちご 2  部屋  0801 0003 きのこ 6  倉庫  0901 ★Bテーブル ID  名前 0001 みかん 0002 いちご 0003 きのこ 0004 あいす ********************************************* となっている場合、下記SQLを実行すると select a.ID ,b.名前 ,sum(a.数) as 数 from Aテーブル a,Bテーブル b where a.日付 >= '0901' and a.日付 <= '0901' and a.ID = b.ID group by a.ID ,b.名前, a.数 結果が 0001 みかん 2 0001 みかん 4 0002 いちご 1 0002 いちご 2 となり0001は合計6で出て欲しいのに別々に出てしまいます。 理想では 0001 みかん 6 0002 いちご 3 で出て欲しいです。 たとえばこの場合、場所によってなど出てしまうものでしょうか? これはなぜなのでしょうか? よろしくお願いします。

  • アクセスの2つのテーブルから重複しないものを抜き出す方法について

    アクセスの2つのテーブルから重複しないものを抜き出す方法について 例えば テーブル Aには ID   価格    商品   1  200    りんご   2  150    みかん   3  180    りんご   4  230    いちご テーブル Bには   1  150    みかん   2  180    りんご とあった場合 A-B のクエリーを実行して   1  200    りんご   2  230    いちご という結果を得たいのですが、どのようにすれば出来るのでしょうか よろしくお願いします。

  • 一つのテーブルの複数のフィールドから抜き出す方法について

    一つのテーブルの複数のフィールドから抜き出す方法について 例えば下記のようなテーブルがあったとします。       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル C商店  イチゴ   パイナップル バナナ D商店  イチゴ   バナナ   りんご のようなテーブルがありフィールド1~4いずれかにみかんを含むクエリーを作成し次のような結果をACCESSで作成したいのですが、簡単な方法はあるのでしょうか?       1     2     3     4 A商店  りんご   みかん   バナナ B商店  みかん   イチゴ   くり    パイナップル よろしくお願いいたします。 尚、使用しているデータベースはACCESS2000です。

  • Excel  データの取得方法

    いつもお世話になります。 Excel(2002)について質問させていただきます。 シート2からデータを取得し、シート1に表示したいのですが・・・ 取得条件は、シート1のA列「みかん」の次の行に「いちご」が くるようにしたいです。また、シート1は必ず「りんご」「みかん」 「いちご」に順になり、それぞれの数(行数)は変動します。 Sheet1      Sheet2  A   B     A   B    りんご 8    いちご 3 りんご 7    いちご 2 みかん 5 いちご 3 いちご 2   これはマクロの一部として行いたいのですが、方法がわかりません。 よろしくご指導のほどお願いします。

  • ACCESSのクエリ機能で重複したデータを除く方法

    accessの初心者です。 どなたかお詳しい方是非よろしくお願い致します。 accessのクエリ機能をつかい、レコードを結合したいのですが、重複したレコードを省く方法を教えてください m(_ _)m 例えば、下記のようなAとBというテーブルがあり、Aには商品番号と商品名、Bには商品番号と倉庫名が入っているとします。 テーブルA(※商品番号の重複なし) 商品番号 商品名 001    商品A 002    商品B 003    商品C テーブルB(※商品番号の重複あり) 商品番号 倉庫名 001    倉庫A 001    倉庫B 001    倉庫C 002    倉庫B 002    倉庫C 003    倉庫A 003    倉庫B 商品番号でクエリをかけて、テーブルAのレコード数と同じレコードの商品番号、商品名、倉庫名と表示させたいのです。 (倉庫名はテーブルBのレコードの中のいずれかだけでOKです。) 例えば、下記のようなクエリ結果を表示させたいです。 商品番号 商品名 倉庫名 001   商品A  倉庫A 002   商品B  倉庫B 003   商品C  倉庫A 説明がうまくできず申し訳ありませんが、どなたかお詳しい方よろしくお願い致します。

  • エクセル 表の表示について

    どなたかお知恵をお貸しいただけたら幸いです。 現在エクセルの表で、日付と買ったものが並んでいるのですが、その表示を一括で変更できたらと思っています。 A列 4/1  りんご B   4/1  みかん C   4/1  いちご D   4/2  みかん E   4/2  メロン F   4/3  いちご 上記の表があり、これを下記のような表に簡単に直すやり方が見つけられずに悩んでおります。 A列  4/1     4/2      4/3 B  りんご    みかん   いちご  C  みかん   メロン D  いちご どなたかよろしくお願いいたします。

  • SQL文でテーブルを作りたいのですが・・・

    テーブルを作りたいのですが、思い描くテーブルが作れず、困っています・・・ 例えばMさんがA→B→C→Dと旅行に行ったとします。 そのとき、行った場所によって日付が登録されるようにしたいと思っています。 このように、別な人もいろいろと旅行し、それぞれの日付があり、どんどんと格納していきます。 最初に ID id 日付 date 場所 point (名前はとりあえず、IDとします) でテーブルを作ろうとしましたが、これだとID一つにつき、日付と場所も一つずつしか入りませんよね? どういったテーブルを作ればいいでしょうか? 思い描くテーブルは下記のような感じです。 ID     日付      場所 -------------- 1  |2010/10/06 |  A   |2010/10/14 |  B   |2010/10/20 |  C   |2010/10/25 |  D -------------------------- 2  |2010/10/23 |  B    |2010/10/24 |  A    |2010/10/25 |  D    |2010/10/27 |  C -------------------------- 3  |2010/10/25 |  D    |2010/10/27 |  C    |2010/11/03 |  B    |2010/11/04 |  A    |2010/11/07 |  D    |2010/11/10 |  C ------------------------- 4  |2010/11/10 | B    |2010/11/15 |  A    |2010/11/16 |  D ・・・・・・・・・・・・・・・ このように一つのIDに対して、日付と場所がランダムの数で格納したいのですが、これって可能でしょうか? テーブルを2つ(以上)作り、外部キーを使ってもかまいません。 また、足りなければ違うIDなどでカバーしてもかまいません。 実際は、このようなテーブルを作り、一人毎の動線を調べるために活用したいと思っています。 Mさん:今日はAに行って、明日はBに行き、明後日はCに行った。すなわち動線は・・・のような感じです。 SQL文でテーブルを作ってください。 補足事項等ありましたらご指摘下さい。追加いたします。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 重複データを除外する際に条件をつけたい

    下記(A)の状態から(B)のような結果を出したくて、group by やサブクエリなどで試行錯誤しましたが、 欲しい結果が取れず困っております。 どなたかわかる方、ご教授いただけましたら助かります。よろしくお願いいたします。 (MYSQLバージョン:4.1.21) (A)  NO|入荷日付|種別|名称   3|20080730|2|りんご   4|20080801|2|りんご   5|20080728|2|りんご   8|20080801|2|りんご  10|20080812|2|りんご   7|20080811|25|ぶどう   9|20080811|25|ぶどう   1|20080731|36|みかん   2|20080728|36|みかん   6|20080808|50|いちご (B)抽出結果  NO|入荷日付|種別|名称  10|20080812|2|りんご   9|20080811|25|ぶどう   1|20080731|36|みかん   6|20080808|50|いちご ■抽出条件  ・【種別】ごとに【入荷日付】が最新のデータを1件だけ抽出。  ・ NO:7やNO:9のデータのように、【種別】と【入荷日付】が同じ場合は、【NO】が最大のデータを抽出。

    • ベストアンサー
    • MySQL
  • 検索結果の出力方法について

    "001","Aさん","ぶどう", "001","Aさん","みかん", "001","Bさん","バナナ", "001","Bさん","イチゴ", "001","Cさん","スイカ", "001","Cさん","メロン", "002",・・・ "003",・・・ 例えば上記の様な検索用のログファイルがあり、”001”で検索した場合、今のところ極々単純に ━━━━━━━ │Aさん|ぶどう| ━━━━━━━ |Aさん|みかん| ━━━━━━━ |Bさん|バナナ| ━━━━━━━ |Bさん|イチゴ| ━━━━━━━ |Cさん|スイカ| ━━━━━━━ |Cさん|メロン| ━━━━━━━ ↑という感じで結果を出力させているのですが、 これを ━━━━━━━ |Aさん|ぶどう| |    |みかん| ━━━━━━━ |Bさん|バナナ| |    |イチゴ| ━━━━━━━ |Cさん|スイカ| |    |メロン| ━━━━━━━ 上記のように、同じ名前の結果が複数ある場合、それを統一して結果を表示させたいと考え、いろいろと悪戦苦闘してみましたが、どうしてもうまくいきません。 ログファイルには手を加えないという事を前提に、下のテーブルのような出力に なるような、構文の書き方がありましたら、是非教えてください。

    • 締切済み
    • PHP
  • 複数のテーブルからのデータ抽出

    こんばんは。お世話になっております。 テーブル(A) id | no | image -------------------- 1 | みかん| aaa.gif 2 | なし | bbb.gif 3 | いちご| ccc.gif テーブル(B) m_id | t_id ---------------- 1  |  3 2  |  2 1  |  2 というようなテーブルがあるのですが、テーブルBのm_id、1を検索した際、t_idを抽出、かつそのt_idと同じ番号であるテーブルAのimageをも抽出したいと考えています。 結果としては、以下のような感じ。 3  ccc.gif 2  bbb.gif $m_id =$_GET["id"]; //途中省略 $sql= "select * FROM B INNER JOIN A ON B.m_id = A.id WHERE m_id = '$m_id'"; としているのですが、テーブルBのt_idは検索されるものの、テーブルAのimageは全てaaa.gifと返ってきてしまいます。 先日、こちらでテーブルの正規化として、データを分散させる考え方をお教え頂き、早速それに習って構成してみたのですが、思うようにデータを抽出出来ずにアドバイスを頂戴したく投函させていただきました。 先のソースで可笑しな点などの忠告や、アドバイスなど頂戴できれば幸いです。宜しくお願い致します。

    • ベストアンサー
    • MySQL