

OS:WindowsXP
SQLServer2000
<質問>
SQL文が浮かばなくて困っています。
どなかたお力を貸していただけないでしょうか。
以下、やりたいことです。
【条件】
1 AテーブルとBテーブルで郵便番号が一致しているものを抽出
2 AテーブルとBテーブルに「番号」列を追加し、初期値を「0」とする
3 1の抽出後、同じ郵便番号がBテーブルに複数あった場合、
2で追加した「番号」列を0→”抽出した行分の数字”にする。
一応、【条件】1の箇所(下記)は浮かんだのですが、
2と3が分かりません。
select Aテーブル.*,Bテーブル.* from Aテーブル,Bテーブル
left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号
WHERE ???
●Aテーブル
ID | 名前 | 郵便番号 | 番号
-----------------------------------------------------------------
01 | 小林 | 101-1000 | 0
02 | 鈴木 | 102-1000 | 0
03 | 田中 | 103-1000 | 0
04 | 町田 | 104-1000 | 0
05 | 木村 | 105-1000 | 0
06 | 中田 | 106-1000 | 0
●Bテーブル
ID | 分類 | 郵便番号 | 番号
---------------------------------------------------------------------
01 | AAA | 101-5555 | 0
03 | CCC | 103-1000 | 0
04 | DDD | 104-1000 | 0
05 | EEE | 105-1000 | 0
06 | FFF | 105-1000 | 0
07 | GGG | 106-1000 | 0
08 | HHH | 106-1000 | 0
09 | KKK | 106-1000 | 0
↓出したい結果↓
ID | 名前 | 郵便番号 | 分類 | 番号
-------------------------------------------------------------------------------
03 | 田中 | 103-1000 | CCC | 0
04 | 町田 | 104-1000 | DDD | 0
05 | 木村 | 105-1000 | EEE | 2
05 | 木村 | 105-1000 | FFF | 2
06 | 中田 | 106-1000 | GGG | 3
06 | 中田 | 106-1000 | HHH | 3
06 | 中田 | 106-1000 | KKK | 3
以上になります。
どうぞよろしくお願い致します。
No.2
- 回答日時:
PARTITION BYは分析関数で、SQL Server 2005以降でしか使えません。
したがって、SQL Server 2000でやるなら以下の通りになるでしょう。
SELECT
a.ID,
a.名前,
a.郵便番号,
b.分類,
ISNULL(c.番号,0) 番号
FROM Aテーブル a
INNER JOIN Bテーブル b ON b.郵便番号=a.郵便番号
LEFT OUTER JOIN
(SELECT 郵便番号,COUNT(*) 番号 FROM Bテーブル
GROUP BY 郵便番号
HAVING COUNT(*)>1) c ON c.郵便番号=a.郵便番号
ありがとうございます。
試したいのですが、c.番号が??です。
新たなテーブル(Cのテーブル)を作らないと求められないということでしょうか。
知識不足で申し訳ございません。。
No.1
- 回答日時:
select
case
count(*)over(PARTITION BY Aテーブル.ID)
when 1 then 0 else
count(*)over(PARTITION BY Aテーブル.ID)
end as 番号
from Aテーブル,Bテーブル
left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号
番号だけ求めました。
実行はしていません。
ありがとうございます。
PARTITIONの存在を今回初めて知り、いまいち使い方が分かりません。
上記のWHERE句の後に教えて頂いたのを追記しましたが、できませんでした。
他に方法がありましたら教えて頂けると助かります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「テーブルに座って……」という...
-
外部キーだけのテーブル(主キ...
-
男性と2人で飲食店に行きテーブ...
-
【エクセル】データテーブルの...
-
飲み会で、座敷orテーブルどち...
-
Excelのテーブルでmatch関数の...
-
複雑なSQL文について
-
コンボボックスにレコードセッ...
-
mysqlでオブジェクト指向データ...
-
MACアドレス見えない
-
[DB設計]多対多の問題点とは
-
SQLです!!教えてください。あ...
-
オーダーの覚え方について
-
ACCESS VBA でテーブルの定義だ...
-
ACCESS 社内ネットワークで、テ...
-
別テーブルにIDが存在しないレ...
-
L2SWはARPテーブルを持っている?
-
SQLの作り方
-
UTF8のテーブルをODBCドライバ...
-
論理名とコメント構文(?)について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「テーブルに座って……」という...
-
会社の飲み会の幹事になり、座...
-
外部キーだけのテーブル(主キ...
-
テーブルリンク リンク元を知...
-
オーダーの覚え方について
-
下記、問題に対しての解答が以...
-
飲み会で、座敷orテーブルどち...
-
アクセスのリンクテーブル一覧...
-
【エクセル】データテーブルの...
-
L2SWはARPテーブルを持っている?
-
面接のときテーブルが正面に。...
-
男性と2人で飲食店に行きテーブ...
-
UTF8のテーブルをODBCドライバ...
-
お金持ちのテーブル
-
1つのテーブルに同じデータを参...
-
テーブル名の前のドットの意味
-
複雑なSQL文について
-
データベースの接続に失敗して...
-
【PHP】SQL文のSUM関数で出力し...
-
更新されたテーブルを表示したい
おすすめ情報