- ベストアンサー
SQL文がわからず、入金管理表を作成する方法
- 質問者は、あるテーブルから入金管理表を作成したいが、SQL文がわからないと述べています。
- 質問者は、試しにCASE WHENを使ってSQL文を作成しましたが、結果が思った通りにならず、助けを求めています。
- 質問者は、入金管理表では、各月の入金予定額と実際の入金額を比較したいと考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- kawais070_1
- ベストアンサー率55% (492/884)
- kawais070_1
- ベストアンサー率55% (492/884)
関連するQ&A
- Oracl[10g]の SQL文について(No.6)
何度も恐縮です。前回の質問(例題)が間違えていました。 本当に申し訳ございません。改めて、お願いしたい次第です。 Oracl[10g]の SQL文について、教えて下さい。 [C1]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE](key) と [NOUKI](key) と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [C2]テーブルに [CODE2](key) と [NAME2] と [CODE] フィールドがあるとします。 内容は、 AAA NAME2-1 A-1 BBB NAME2-2 A-2 CCC NAME2-3 A-3 と、します。 [C3]テーブルに [CODE2](key) と [NO](key) と [KIN2] フィールドがあるとします。 内容は、 AAA 1 200 AAA 2 300 BBB 1 10 BBB 2 20 BBB 3 30 と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 500[C3]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 60[C3]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。
- ベストアンサー
- Oracle
- OraclのSQL文について(No3)
何度も恐縮です。また、違った事が出てきました。(^^; Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 BBB A-2 2005/01/01 300 CCC A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 結果が、 A-1 NAME-1 300 AAA A-2 NAME-2 1200 CCC と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィードは一番最初を表示させたいのです。 SELECT A.CODE, A.NAME, B.CODE2, SUM(B.KIN) FROM A, B WHERE A.CODE = B.CODE GROUP BY A.CODE, A.NAME,B.CODE2 ORDER BY A.CODE と、すれば A-1 NAME-1 AAA 100 A-1 NAME-1 BBB 200 A-2 NAME-2 CCC 300 A-2 NAME-2 DDD 400 A-2 NAME-2 EEE 500 と、言う結果がでます。(当然ですが) これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。
- ベストアンサー
- Oracle
- 凝ったSQL文なのですが・・・
下記SQLを教えてください。 テーブル構成は(基本的には)変更不可という前提でお願いいたします。 以下のような会員テーブルがあります。 ユーザID毎に、入会日、退会予定日が登録されており、 ユーザID+履歴No.でプライマリとします。 このテーブルは、月に一度、退会手続きのなかった会員に対して、 自動で新規レコード追加します(継続手続)。 ある期間休んだ後、再入会の場合も手動で新規レコード追加されます。 ステータスは有効(1)/無効(0)の判定です。 no user_id start_day end_day status ---------------------------------------- 1 aaa 2002/12/01 2002/12/31 0 2 aaa 2003/01/01 2003/01/31 0 3 bbb 2003/01/01 2003/01/31 0 4 aaa 2003/02/01 2003/02/28 1 5 bbb 2003/02/02 2003/02/28 1 6 ccc 2003/02/01 2003/02/28 1 とデータが入っている場合に、 新規登録ユーザ(No.6)および 再入会ユーザ(No.5)をえらびたいのです。 あるユーザが自動継続かどうかの判定は、 status=1のレコードのend_dayと そのひとつ古いレコードのend_dayが連続していることです。 よろしくお願いいたします。
- ベストアンサー
- その他(データベース)
- SQL文で教えていただきたいのですが・・・
現在、Windows版のMySQLを使っており、 webのサービスでログ解析を行っているのですが、初心者の私ではどうにもならなくなったのでご教授ください。 Table「info」:ユーザー登録DB | id | varchar(16) |←登録ID | name | varchar(50) |←登録名 | mail | varchar(50) |←登録メールアドレス Table「log」:ログインのログをとるテーブル | date | int(11) |←ログインした時間 | id | varchar(16) |←ログインしたID と言うデータベースがあり、登録ポリシーは「一つのメールアドレスで複数のIDを取得可能」というものです。 したがって、 aaa@bbb.com と言うメールアドレスで登録したIDは複数存在し、 AAA BBB CCC と言う3つをもっていることもあります。 ところが、ログはID単位でとっているため、メールアドレスが同じにもかかわらずこうなります。 +------------+-----+ | date | id | +------------+-----+ | 1068019110 | AAA | | 1068019200 | BBB | | 1068019209 | CCC | | 1068019210 | AAA | | 1068019213 | BBB | +------------+-----+ これでは、ログの集計をしても1人がログインした数を集計できません。メールアドレス別のログをとりたいのです。 単純に表にするのは select log.id, mail from log_login inner join info on info.id=log_login.id where mail='***@***.com' order by date; にすることでなんとかできたのですが、別に表にする必要はなく、アクセス数だけを知りたいのです。 どうやったらいいのでしょうか???
- ベストアンサー
- その他(データベース)
- 同じ列に2行づつで出力するSQL
次のようなテーブルがあったとき no | name 1 | aaa 3 | bbb 4 | ccc 6 | ddd (先頭はカラム名です) 以下のように出力するSQLは書けますでしょうか? no1| name1 | no2| name2 1 | aaa | 3 | bbb 4 | ccc | 6 | ddd
- ベストアンサー
- その他(データベース)
- Sqlite3にて、縦持ちデータの一部を横持ち
お世話になります。 Sqlite3 windows7 使用です。 Sqlite3にて縦持ちの一部を横持ちにする作業をしています。 text_date|name|uriage 05_01 aaa 1 05_01 bbb 2 05_01 ccc 3 05_01 ddd 4 05_01 eee 5 05_02 aaa 6 05_02 bbb 7 05_02 ccc 8 05_02 ddd 9 05_02 fff 10 05_03 aaa 11 05_03 bbb 12 05_03 ccc 13 05_03 ddd 14 05_03 ggg 15 05_04 aaa 16 05_04 bbb 17 05_04 ccc 18 05_04 ddd 19 05_04 hhh 20 列:text_dateには、日付がテキストデータで入力されています。 列:nameには、同一でない名前が一部含まれます。 列:uriageは、INTEGERにて入力されています。 この表の日付(text_date)の任意の2日分を、 名前ごとにグループ化し、日付を横列展開にてuriageの表示をしたいです。 例えば、日付が05_03 と 05_04 のデータを下記のように取得したいです。 name|uriage_03|uriage_04 aaa 11 16 bbb 12 17 ccc 13 18 ddd 14 19 ggg 15 hhh 20 下記のSQL文で 名前(name)をグループ化する前の横列展開はできるのですが、 名前をグループ化すると、片方の日付しか表示されなくなります。 (重複のない人は、そのまま表示されるます) ------------------- select name ,case when text_date = '05_03' then uriage end as uriage_03 ,case when text_date = '05_04' then uriage end as uriage_04 from ( select * from test1 where text_date = '05_03' or text_date = '05_04' ) group by name ←*group byを入れると片方の日付だけが表示 ------------------- ↓nameをグループ化すると片方の日付のみが表示 name|uriage_03|uriage_04 aaa 16 bbb 17 ccc 18 ddd 19 ggg 15 hhh 20 正しいコードをご教示いただけますと幸いです。 よろしくお願いします。
- ベストアンサー
- MySQL
- オラクルで
オラクルのSQLでの質問ですが、 2つのテーブルに同じ名前の列があります。 TEMP1 TEMP2 ---------- ------------- NAME CODE NAME NUM aaa 1 ccc 5 bbb 2 ddd 10 この2つのテーブルを検索して、同じ列として表示したいのですが 可能なのでしょうか? NAME ----------- aaa bbb ccc ddd このようにしたいのですが、ビューなどは使ってかまわないのですが 方法がありましたら教えてください。
- ベストアンサー
- その他(データベース)
- SQL 条件下の任意文字出力について
お世話になります。 SQLで特定条件の時に任意の文字列を出力したいです。 表1 NO PRICE ___ ___ 1 100 2 200 3 300 NOが1のとき、列名を「CODE」として"aaa" NOが2のとき、列名を「CODE」として"bbb" NOが3のとき、列名を「CODE」として"ccc" 出力結果 NO CODE ___ ___ 1 aaa 2 bbb 3 ccc こんな感じの結果を得たいです。 どうぞよろしくお願いいたします。
- 締切済み
- Oracle
- SQLでできること
SQLだけでできることと、できないことって、一言で言い表せるでしょうか? データベースからデータを取り出すとき、どこまでできて、どこからはphpなど他の言語で処理したらいいのか、とても気になるんです。 もしかして、何でもできるのかな? というのも、今やりたいと思っていることが、 (環境はMySQL+PHP使用で、ブラウザで表示させます) テーブル A(人物のリスト) id|name ------- 1 | aaa 2 | bbb 3 | ccc 4 | ddd テーブル B(人物と成績のリスト) name| point ------------- aaa | 10 bbb | 15 bbb | 10 aaa | 20 bbb | 25 ccc | 30 のようなテーブルがあったとき、 aaaのpointの合計 = 30 bbbのpointの合計 = 50 cccのpointの合計 = 30 dddのpointの合計 = 0 ← テーブルBに載ってない人もいる という人物全員の結果の集計をするには、どうすると最適でしょう? 私がすぐ思いつくのは、テーブルAのデータを配列に読み込んで、それを元に次はテーブルBから、人物別の行を取り出すSQL文を作って、pointを集計するという手順です。他に手段はあるでしょうか?
- ベストアンサー
- MySQL
- SQLでご助言いただきたく。
テーブル名:AAA カラム: 'fname' ,ename テーブル名:BBB カラム: "id",fcode テーブル名:CCC カラム : "id",'fname',date 上記三つのテーブルAAA,BBB,CCCにそれぞれカラムがあります。 最終的に ename fcode date の3カラムを結合した状態でSELECTします。 ただし、条件として AAAのfname列とCCCのfname列を紐付けし、尚且つ BBBのid列とCCCのid列を紐付けし、尚且つ CCCのdate列が2012-10-31以上のものだけをSELECTしたいです。 上記を踏まえて下記二点ご質問致します。 (1)私が考えたSQL文は select a.ename ,bc.fcode ,bc.date from AAA a , (select b.fcode ,c.fname ,c.date from BBB b , CCC c where b.id = c.id and c.date >= '2012-10-31' ) bc where a.fname = bc.fname ; です。先にBBBとCCCから紐付けしその結果とAAAを紐付けしています。 このSQL文で間違いがないかどうか判定していただきたく。 (2)もっとスマートな書き方(短く書けるなど)がありましたら、 ご助言いただきたく。 ちなみにデータベースはオラクル仕様です。 宜しくお願い致します。
- ベストアンサー
- Oracle
お礼
しらべてみました。 自己結合ってやつですね。 初めて知りました。 ありがとうございました。