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で質問しましょう!
似たような質問が見つかりました
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
男性と2人で飲食店に行きテーブ...
-
テーブルリンク リンク元を知...
-
アクセスのリンクテーブル一覧...
-
「テーブルに座って……」という...
-
外部キーだけのテーブル(主キ...
-
L2SWはARPテーブルを持っている?
-
一致するデータのみ削除したい
-
論理名とコメント構文(?)について
-
mysql alter table 終わらない
-
重複項目の抽出方法を教えてく...
-
UTF8のテーブルをODBCドライバ...
-
ターンテーブルの、電子レンジ...
-
2つのテーブルで一致している...
-
データベースの接続に失敗して...
-
面接のときテーブルが正面に。...
-
飲み会で、座敷orテーブルどち...
-
テーブル設計について
-
検索結果からさらに検索
-
SQLserver2005 テーブル一覧の取得
-
sql 個別に情報取得方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
L2SWはARPテーブルを持っている?
-
外部キーだけのテーブル(主キ...
-
fetch_arrayでのエラー
-
テーブルリンク リンク元を知...
-
男性と2人で飲食店に行きテーブ...
-
会社の飲み会の幹事になり、座...
-
SQLです!!教えてください。
-
面接のときテーブルが正面に。...
-
飲み会で、座敷orテーブルどち...
-
「テーブルに座って……」という...
-
複雑なSQL文について
-
このテーブルで
-
MySQLで複数テーブルを作成する
-
アクセスのリンクテーブル一覧...
-
ちょっとぐらいの時間なら里山...
-
SQLでテーブルの値を集計して、...
-
論理名とコメント構文(?)について
-
件数の多い順にselect
-
【PHP】SQL文のSUM関数で出力し...
-
オーダーの覚え方について
おすすめ情報