PostgreSQL8.3でのSELECT文について

このQ&Aのポイント
  • PostgreSQL8.3におけるSELECT文を使用して、特定のテーブルから年月ごとの担当者ごとの金額をまとめた表を作成する方法を説明します。
  • テーブルから特定の条件を指定してデータを抽出するSELECT文の使い方について解説します。
  • PostgreSQL8.3のSELECT文を使用して、テーブルから特定の列のデータを取得する方法について説明します。
回答を見る
  • ベストアンサー

SELECT文について

PostgreSQL8.3にて、 |ID|担当者| 年月 |金額| | 1|太 郎|200807| 500| | 2|次 郎|200807|1000| | 3|次 郎|200807| 500| | 3|太 郎|200808|1000| | 4|次 郎|200808|1100| | 5|三 郎|200808| 900| | 6|太 郎|200809|1100| | 7|三 郎|200809|1200| というテーブルから、 | 年月 |太郎|次郎|三郎| |200807| 500|1500| 0| |200808|1000|1100| 900| |200809|1100| 0|1200| このようにすることは可能なのでしょうか。 どうかよろしくお願いします。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

ためしていませんが select 年月, sum( case 担当者 when '太郎' then 金額 else 0 end ) as 太郎, sum( case 担当者 when '次郎' then 金額 else 0 end ) as 次郎, sum( case 担当者 when '三郎' then 金額 else 0 end ) as 三郎 from テーブル group by 年月

revachin
質問者

お礼

完璧に出来ました。 どうもありがとうございました。 回答いただいた内容をふまえて、 ID|担当者| 年月 |金額 01| 太郎 |2008-07-01| 500 02| 次郎 |2008-07-02|1000 03| 次郎 |2008-07-03| 500 04| 太郎 |2008-08-04|1000 05| 次郎 |2008-08-05|1100 06| 三郎 |2008-08-06| 900 07| 太郎 |2008-09-07|1100 08| 三郎 |2008-09-08|1200 「年月」の内容を'年月日'にかえてやってみました。 select to_char(年月, 'yyyy-mm') as 年月, sum( case 担当者 when '太郎' then 金額 else 0 end ) as 太郎, sum( case 担当者 when '次郎' then 金額 else 0 end ) as 次郎, sum( case 担当者 when '三郎' then 金額 else 0 end ) as 三郎 from テーブル group by to_char(年月, 'yyyy-mm') order by to_char(年月, 'yyyy-mm') 手探りですが何とか出来ました。 本当にありがとうございました。

関連するQ&A

  • エクセルで文字列を数えて一覧表にしたいのですが

    たとえばですが、2人一組で配達に行きます。 メンバーは、太郎、次郎、三郎、四郎、五郎・・・と多人数です。 A1に太郎、B1に三郎 A2に次郎、B2に五郎 A3に太郎、B3に次郎 ・ ・ ・ と、いうような表ができます。 このとき、*郎は何回配達にいったのかをカウントしたいのです。 *郎は、A、Bのどちらに登場するかわかりませんし、 何回も登場しますし、組み合わせもばらばらです。 最終的に、太郎 15回、次郎 8回、三郎 21回・・・というように分かるようにしたいので、 仮にD1に太郎、E1に次郎、F1に三郎・・・の名前 (ダブって登場する名前を一つにまとめて、登場する全ての名前を残したい)、 D2に太郎、E2次郎、F2に三郎の回数(登場した名前の回数を数字で求めたい) というようにしたいのです。 エクセルの詳しい方、よろしくお願いします。

  • 【初心者】ACCESSで異なるテーブルの数値を比較~計算したいです。

    またまたACCESSに詳しい方がいましたらお教え下さい。 テーブルA 名前|金額 ----------- 太郎|3000 次郎|2000 三郎|1000 テーブルB 名前|借入 ----------- 太郎|1000 次郎|2000 三郎|3000 こんなテーブルが2つあった場合。(名前フィールドはAもBも同じ) クエリで金額と借入を比較し、金額>借入の場合に表示。かつ表示するものは金額-借入の 数値とする場合は、どのようにすればいいでしょうか。。 (金額<借入の場合は表示自体しなくて良い) 【結果イメージ】 名前|結果 ----------- 太郎|2000 ご存知の方がいらしたら、お教え下さい。

  • 2つのテーブルをひとつのテーブルとして表示

    お世話になります ■概要 Accessで2つのテーブルを1つにして表示させるにはどうしたらいいでしょう? ■詳細 サンプル1とサンプル2のテーブルが2つあるとします (サンプル内の列名はすべて同じです) それをひとつのクエリで表示させたいのですが(よに表示ではなく同じ列に表示させたいです サンプル1 ID|名前|年|  1|太郎|4 | 2|次郎|6 | サンプル2 ID|名前|年|  1|五郎|2 | 2|三郎|1 | 結果クエリ1 名前|年| 太郎|4 | 次郎|6 | 五郎|2 | 三郎|1 | わかる方ご教授願います

  • mysqlのsql文について教えて下さい

    mysqlのsql文について教えて下さい 下記のようなテーブルとデータがあった場合に どうやれば 2,次郎だけを抽出できますか? 本日日付(2010-08-06)が 既にテーブルBにdateが存在する場合は 3,1,2010-08-04 3,1,2010-08-06を 対象外にしたいです。 Aテーブル id,user 1,太郎 2,次郎 3,3郎 Bテーブル targetid,homonid,date(datetime型) 3,1,2010-08-04 3,1,2010-08-06 3,2,2010-08-05 下記だと2010-08-04にヒットしてしまい(当たり前?)動作しません。 select distinct a.* from tblA a, tblB b where date_format(b.date, "%Y-%m-%d") <> "2010-08-06" ;

  • エクセルの集計での質問

    A列に日付、BからF列に担当者名(1~5)が入っています。 この表で誰が何日稼働したか調べたいのですが、日付の被りがあるのと、例えば▲▲さんが「担当者1」、●●さんが「担当者2」と決まっているわけでなく、早いもの順に「担当者1~5」までに名前が入っています。 A B C D E F 日 担1 担2 担3 担4 担5 1/3 太郎 次郎 花子 三郎 和子 1/3 次郎 太郎 三郎 美和 和子 1/4 花子 次郎 孝夫.......... この場合求められたものが 1/3 太郎 ×1、次郎 ×1、三郎×1、花子×1、和子×1 、美和×1 1/4 花子×1、次郎×1、孝夫×1 なので 太郎1日 次郎2日 三郎1日 花子2日 和子、美和、孝夫各1日 という風にエクセルで集計できないでしょうか?

  • 次のデータ抽出を(高速に)行うSQLを教えてくださ

    自分がフォローしている人のつぶやきと、じぶんの呟きを含めて、日付順で表示するSQLを検討しています。 MYSQLの構文がかなり複雑になってしまったために、 もっと簡単に高速にSQLで記述する方法がありましたら教えて頂けませんでしょうか。 長文になり申し訳ございませんが、アドバイスいただけると幸いです。 テーブルは以下の3種類です。 ●cutomer:登録者名を記録 <構造> id(auto increment,key),name(名前) <サンプルデータ> 0,"太郎" 1,"次郎" 2,"三郎" 3,"四郎" ●follow:誰が(my_user_id)、誰をフォローしているか(target_user_id)を記録 <構造> id(auto increment,key),my_user_id,target_user_id <サンプルデータ> 0,1,0 0,1,2 ●tweet:つぶやきを記録 <構造> id(auto increment,key),user_id,tweet_comment(つぶやき),date(つぶやき日時) <サンプルデータ> 0,1,"次郎のつぶやきです","2011-01-01 00:00:00" 1,2,"三郎のつぶやきです","2011-02-01 00:00:00" 2,0,"太郎のつぶやきです","2011-03-01 00:00:00" 3,1,"次郎のつぶやきです","2011-04-01 00:00:00" 4,3,"四郎のつぶやきです","2011-05-01 00:00:00" 上記のサンプルデータを用いて、期待する出力結果をご説明します。 例として、入力値を「次郎」とすると、 「次郎」のつぶやきと、次郎がフォローしている太郎と三郎の呟きを表示したいです。 "次郎","次郎のつぶやきです","2011-01-01 00:00:00" "三郎","三郎のつぶやきです","2011-02-01 00:00:00" "太郎","太郎のつぶやきです","2011-03-01 00:00:00" "次郎","次郎のつぶやきです","2011-04-01 00:00:00" 現状は、次郎とつぶやきselectと、次郎がフォローする太郎と三郎のつぶやきselectを unionで結合する形式なっており、もうちょっと賢くできないものかと悩んでいます。 なお、対象の次郎のuser_id(サンプルでは"1")は予めわかっているものとします。 ( select customer.name,tweet.tweet_comment,tweet.date from customer,tweet where customer.id = 1 and customer.id = tweet.user_id ) union ( select customer.name,tweet.tweet_comment,tweet.date from customer,tweet,follow where follow.my_user_id = 1 and follow.target_user_id = tweet.user_id and tweet.user_id = customer.id ) order by table_tweet.date asc

    • ベストアンサー
    • MySQL
  • 複雑なSELECT文について

    ID 名前 日付 点数 合否 ---------------------------------------------------------- 1 太郎 4/1 80 合格 2 太郎 4/2 90 合格 3 太郎 4/3 100 合格 4 花子 4/5 20 不合格 5 太郎 4/5 30 不合格 6 花子 4/6 100 不合格 7 太郎 4/7 40 不合格 8 花子 4/7 100 合格 上のようなテーブルから、太郎と花子が最初に合格するまでの 実施回数を取得するようなSELECT文は可能でしょうか? 結果として望むのは以下になります。 ID 名前 合格までの実施回数 --------------------------------------------------------------- 1 太郎 1 2 花子 3 どなたかご教授願います。

  • 次の条件を満たすSQL文をご教示下さい。

    テーブル名: list no | first_name | last_name | comment ----+------------+-----------+--------- 1 | 太郎 | 山田 | ほげ 2 | 次郎 | 田中 | ふが 3 | 花子 | 山田 | ぴよ 4 | 三郎 | 佐藤 | ぴよ 5 | 太郎 | 山田 | ぴよ 6 | 次郎 | 田中 | ふー 7 | 三郎 | 佐藤 | ふー 8 | 花子 | 山田 | ふー 上記の表から同じ”last_name”を持つ人の”first_name”と”last_name”を重複無しで抽出する(下記のような結果)SQL文は作成可能でしょうか。 結果 first_name | last_name ------------+----------- 太郎 | 山田 花子 | 山田 宜しくお願いします。

  • 複雑なSELECT文について

    ID 名前 日付 点数 合格日 ------------------------------------------------------------------- 1 太郎 2007/4/1 80 合格 2 太郎 2007/4/2 90 合格 3 太郎 2007/4/3 100 合格 4 花子 2007/4/5 20 不合格 5 太郎 2007/4/5 30 不合格 6 花子 2007/4/6 100 合格 7 太郎 2007/4/7 40 不合格 8 花子 2007/4/7 100 合格 上のようなテーブルから、太郎と花子が最初に合格した日の情報を 取得するようなSELECT文は可能でしょうか? 結果として望むのは以下になります。 ID 名前 日付 点数 合格日 --------------------------------------------------------------------- 1 太郎 2007/4/1 80 合格 6 花子 2007/4/6 100 合格 どなたかご教授願います。

  • 中学受験算数の問題(仕事算)教えてください

    中学受験の算数の問題です。答えは分かっているのですが、考え方がわかりません。 どうか教えてください、よろしくお願いいたします。 {問題} 1時間当たりの仕事量が違う太郎君、次郎君、三郎君の3人が、一日6時間ずつ5日間働いて 完成する仕事があります。初日は三郎君が休んだので、太郎君、次郎君の2人で6時間ずつ働き、 2日目から4日目は3人で6時間ずつ働きました。最終日は3人で7時間ずつ働くと完成する予定 でしたが、最終日に次郎君が休んだため、太郎君と三郎君が2人で10時間30分ずつ働いて 完成することができました。次の問いに答えなさい。 (1)三郎君が一人でこの仕事を終わらせるには何時間かかりますか? (2)一時間当たりの、次郎君と三郎君の仕事量の比を求めなさい。 (3)仕事量に比例して賃金が支払われ、次郎君は48000円もらいました。   太郎君と三郎君はそれぞれいくらもらいましたか? 2013年立教新座中学の入試で出された問題だそうです。 ちなみに答えは、(1)180時間  (2)2:1  (3)太郎103,500円 三郎28,500円 (1)、(2)だけでもいいです。 小学生にも分かるように解説して頂けたらありがたいです。 どうかよろしくお願いいたします。