アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんばんは。
すみませんが、下記のように出力するSQLを教えて下さい。

[処理table]のstatusが「新規」のに該当する場合、[処理table]の内容を、
[処理table]のstatusが「新規」のに該当しない場合、[処理ログテーブル]
の「日付」が現在日付に近い内容のみを出力する。

 氏名 project名 status 日付
------+----------+-------+-------
 鈴木 softA  新規
 大塚 softB  承認   08/20
 大沢 softC  新規

を期待しています。
SQLの経験が少ない為、悩んでます。
「UNION ALL 」について調べて見ましたが、カラム数が異なるのでNGと判断
しました。
「それぞれの条件の結果を縦につなげて…」とイメージしてみたのですが、
それに相当する資料が見当たらず、悩んでいます。
tableの[処理ログtable]の「日付」を[処理table]の項目とすればよ
いのですが、現在のDB設計がこのようになってしまっているので、改善できま
せん。

補足もしますので、お忙しいところすみませんが、宜しくお願いします。

-説明-

[顧客table](主キー:顧客ID)
顧客ID 氏名
------+-------
020001 鈴木
020002 大塚
020003 大沢

[処理table](主キー:通番(自動発番))
通番 顧客ID projectID status
----+-------+----------+-----------
0001 020001   0001 新規
0002 020003   0003 新規
0014 020002   0004 承認

[処理ログtable](主キー:通番(自動発番))
通番 顧客ID projectID status 日付
----+-------+----------+-------+------
0032 020002   0004 修正  08/02
0033 020002   0004 修正  08/15
0034 020002   0004 承認  08/20

[projecttable](主キー:projectID)
projectID project名
---------+----------------
  0001 softA
  0002 softB
  0003 softC
  0004 softF

A 回答 (2件)

こんにちは、



> カラム数が異なるのでNGと判断しました。
status が「新規」の場合、NULL を日付として返してやれば、
UNION ALL でOk ですょ。
    • good
    • 2
この回答へのお礼

こんにちは。

早々の回答有難うございます。
>status が「新規」の場合、NULL を日付として返してやれば、
>UNION ALL でOk ですょ。
なるほど。

その後、やっとの思いでOracleに携わっているひとを見つけて話をしてみたら、「カラムをあわせればできる」とアドバイスしてもらいました。
詳細は、muyoshidさんと同じ回答でした。

muyoshidさんの回答を元に、また試行錯誤してみます。
有難うございました。

お礼日時:2005/09/02 09:26

"union"も"union all"も、カラム数、カラム属性が同じ結果セットしか


統合できません。なので、#1で書かれているように、加工するなりして
属性とカラム数を合わせて下さい。

ただ、今回のSQLでは、unionやunion allは、特に必要ないように思います。
(unionを使った解決法も無くもないけど・・)

select
B.氏名,
C.PROJECT名,
A.STATUS,
(select max(日付) from 処理ログTABLE X where A.STATUS='承認' and X.日付<=SYSDATE) 日付
from 処理TABLE A,顧客TABLE B,PROJECTTABLE C
where A.顧客ID=B.顧客ID and A.PROJECTID=C.PROJECTID
;

とかで、良いんじゃないですかね。(未検証ですが)
    • good
    • 0
この回答へのお礼

返事が遅くなりすみません。

UNIONを使わない方法もあるのですね!!
SQLの経験が少ない為、とても参考になりました。
しかし、今回は、#1さんのを採用しました。

次の機会に盛込んで見たいと思います。

お礼日時:2005/09/28 18:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す