
こんばんは。
すみませんが、下記のように出力する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
No.1ベストアンサー
- 回答日時:
こんにちは、
> カラム数が異なるのでNGと判断しました。
status が「新規」の場合、NULL を日付として返してやれば、
UNION ALL でOk ですょ。
こんにちは。
早々の回答有難うございます。
>status が「新規」の場合、NULL を日付として返してやれば、
>UNION ALL でOk ですょ。
なるほど。
その後、やっとの思いでOracleに携わっているひとを見つけて話をしてみたら、「カラムをあわせればできる」とアドバイスしてもらいました。
詳細は、muyoshidさんと同じ回答でした。
muyoshidさんの回答を元に、また試行錯誤してみます。
有難うございました。
No.2
- 回答日時:
"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
;
とかで、良いんじゃないですかね。(未検証ですが)
返事が遅くなりすみません。
UNIONを使わない方法もあるのですね!!
SQLの経験が少ない為、とても参考になりました。
しかし、今回は、#1さんのを採用しました。
次の機会に盛込んで見たいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) accessについて 2 2022/05/31 16:58
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- 政治 日本で訴訟件数が少ないのは、自民党とビッグモーターが詐欺組織だからですか? 2 2023/07/27 11:30
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
処理件数を非表示にしたい
-
カーソル0件の時にエラーを発生...
-
カーソルオープンの処理について
-
日付処理
-
テーブルの項目が異なるテーブ...
-
カーソル宣言をIFで分けられま...
-
(x 行処理されました)を表示さ...
-
動的SQLの処理件数
-
NVLとDECODEのスピード差
-
データ型でFloatとreal の計算...
-
300万件のデータの処理について
-
複数レコードを1変数にセット...
-
Accessで処理経過を表示したい...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルの関数について教えて...
-
for whichの使い方
-
EXISTSを使ったDELETE文
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カーソル0件の時にエラーを発生...
-
処理件数を非表示にしたい
-
カーソルを使って、最終行レコ...
-
NVLとDECODEのスピード差
-
(x 行処理されました)を表示さ...
-
データ型でFloatとreal の計算...
-
カーソル宣言をIFで分けられま...
-
カーソルオープンの処理について
-
動的SQLの処理件数
-
Accessで処理経過を表示したい...
-
クエリの実行時間の目安
-
ストアドプロシージャ_カーソル...
-
ACCESSで一括処理する方法
-
テーブルの項目が異なるテーブ...
-
カーソルがコミットするとクロ...
-
SQL-LOADERの逆のもの
-
複数レコードを1変数にセット...
-
わり算の結果が整数でも小数点...
-
SQL plus で改行
-
PL/SQLのエラー処理について
おすすめ情報