
No.2ベストアンサー
- 回答日時:
例1)単純に縦に出力したいときに使う。
select 課名,'予算' as 予実,nvl(予算金額,0) from 課マスタ
left outer join 予算マスタ on 課マスタ.課コード = 予算マスタ.課コード
union
select 課名,'実績' as 予実,nvl(実績金額,0) from 課マスタ
left outer join 実績マスタ on 課マスタ.課コード = 予算マスタ.課コード
order by 課名,予実
とすると、
1課 予算 10000
1課 実績 8500
2課 予算 20000
2課 実績 0
・・・
とでる。
例2)例1と違ってどちらか一方にしかないデータをどちらも出したいときに使う。
select 課名,sum(予算金額), sum(実績金額)
from (
select 課名,予算金額 as 予算金額,0 as 実績金額 from 予算マスタ
union
select 課名,0 as 予算金額,実績金額 as 実績金額 from 実績マスタ
)
group by 課名
order by 課名
とすると
1課 10000 8500
2課 20000 0 ←実績マスタなし
3課 0 8500 ←予算マスタなし
とでる。
例3)今年新規(過去3年間取引のなかった取引先も新規として扱う)で獲得した取引先の数
select count(*) from
(
select distinct 取引先コード from 売上マスタ where 年度 = 2012
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2011
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2010
minus
select distinct 取引先コード from 売上マスタ where 年度 = 2009
)
例4)(これはどっちかというとシステム保守要件ですが。)
何らかの異常があったときに不整合データのチェックに使う
select * from Aマスタ_バックアップ
minus
select * from Aマスタ
Aマスタ_バックアップにあってAマスタにないものが出てくるので、
これらを調べたりする。
select * from Aマスタ
minus
select * from Aマスタ_バックアップ
逆のパターンのデータ。これも調べる。
とか。
例5)Orの代わりにunionを使うと便利なこともたまにある。
select * from table1 where Key1 between 1 and 3
union
select * from table1 where Key1 between 6 and 7
union
select * from table1 where Key1 between 12 and 18
select * from table1
where Key1 between 1 and 3 or Key1 between 6 and 7 or Key1 between 12 and 18
と書けばしまいなのだが、orを使うとインデックスを使ってくれないことがあるので、
orを使わないselectをunionしたほうが早いことがたまにある。
★table1が、5000万件あるときなどあくまで例外的な使い方です。
!!!普通は、orを使ったほうがいいです!!!
## SQLはこんな感じだったと思うというレベルで書いています。(うまく動かないかも)
## とりあえず、過去に使った例ですぐに思いついたパターンを挙げてみました。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで違うテーブルの結果を組み...
-
ACCESS検索★ある文字を複数のフ...
-
Excel 2019 のピボットテーブル...
-
【続続】Access2002で連番のつ...
-
【Access】フォームで自動計算...
-
OCNのwebメールを開くとき、シ...
-
保存された情報として表示され...
-
再計算って出来ますか?
-
Accessで、複数のテーブルで随...
-
Accessのクエリでデータの入力...
-
accsessで顧客コードで氏名を呼...
-
どれがPrimary Key、ForeignKey...
-
datファイルからaccessにインポ...
-
下記の事を行うSQLがわかりませ...
-
Countと受付状態の表示に...
-
Access クロス集計クエリについて
-
デザインビューで、連結式 を...
-
Access2000 更新のタイミング?
-
カウントが出来ません
-
Vbaでアクセスからエクセルにリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
MySQLで改行を含む文の登録のし...
-
項目名の制限について
-
フォームで検索 エラーの表示...
-
列名無効について
-
Accessで期間指定の売上合計と...
-
ORA-01722: 数値が無効です
-
改行コードを削除して取得する...
-
縦表示データを列として取得す...
-
DATA 集計
-
SQL抽出方法:売上Tを集計した...
-
SQLServerにおける累積、累計取...
-
オラクルSQLの累計値取得方法に...
-
DB設計
-
SQL抽出方法に悩んでいます④
-
以下のようなSQLについて教えて...
-
SQL抽出方法に悩んでいます。 S...
-
インサート文での条件の指定に...
-
ORACLEのUPDATEについて...
-
SQLでNOT INと!=ALLの違い
おすすめ情報