dポイントプレゼントキャンペーン実施中!

いつもお世話になっています。

本日の午前中までに作成しないとならないのですが、下記の動作がわかりません。
お分かりになる方がいましたらどうか教えていただけないでしょうか!

環境:SQL2000
   windowsXP

【条件】
・Aテーブルの番号列は全て”0”とする
・Aテーブルの1つの郵便番号が複数の住所をもつ→”0”のまま
・Aテーブルの1つの住所が複数の郵便番号をもつ→番号列を”1”とする。

●Aテーブル
ID  | 名前 | 郵便番号  | 住所   | 番号
-----------------------------------------------------------------------------
01 | 小林  | 101-1000 | 東京都  |  0
02 | 鈴木  | 102-1000 | 東京都  |  0
03 | 鈴木  | 103-1000 | 茨城県  |  0
04 | 町田  | 105-1000 | 神奈川県 |  0
05 | 木村  | 105-1000 | 群馬県  |  0

↓出したい結果↓
ID  | 名前 | 郵便番号  | 住所   | 番号
-----------------------------------------------------------------------------
01 | 小林  | 101-1000 | 東京都  |  1
02 | 鈴木  | 102-1000 | 東京都  |  1
03 | 鈴木  | 103-1000 | 茨城県  |  0
04 | 町田  | 105-1000 | 神奈川県 |  0
05 | 木村  | 105-1000 | 群馬県  |  0

以上になります。どうぞよろしくお願いします!

A 回答 (3件)

#1,#2です。


テーブルの別名をうまく使わないと、JOINの多いクエリは複雑になるので、混乱するんだと思います。
今回はどうせ別名は必須なので、全部のテーブルを別名を使って書けばよいと思います。

SELECT
--表示するデータ
・・・
・・・
・・・
FROM Aテーブル a
LEFT OUTER JOIN Bテーブル b ON a.○○ = b.○○
LEFT OUTER JOIN Cテーブル c ON a.△△ = c.△△
INNER JOIN
(SELECT 住所,COUNT(DISTINCT 郵便番号) CNT
FROM Aテーブル
GROUP BY 住所) d ON a.住所=d.住所
WHERE a.■■='1'
ORDER BY a.◎◎
    • good
    • 0
この回答へのお礼

jamshid6様

お礼が遅くなり申し訳ございません!
教えていただいたとおりにやったら、見事できました!
ありがとうございました!

お礼日時:2009/10/30 09:50

#1です。



>SELECT文ではなく、Aテーブルを更新するという意味で、UPDATEを使用することも可能でしょうか。

その場合は、1に更新したいもの(=Aテーブルの1つの住所が複数の郵便番号をもつ)だけを対象とすればよいので、私ならばこうします。

UPDATE Aテーブル
SET 番号=1
WHERE 住所 IN
(SELECT 住所 FROM #WK
GROUP BY 住所
HAVING COUNT(DISTINCT 郵便番号)>1)
    • good
    • 0
この回答へのお礼

いつもありがとうございます。
UPDATEについてはまだ未確認の為、改めてご報告したいと思います。

SELECT文の方なのですが、
教えていただいたほかに2箇所LEFT OUTER JOINもしている為、とても複雑になってしまい、どうしてもエラーがでてしまいます。
2箇所LEFT OUTER JOINの後に、今回教えていただいたSELECT文を挿入する方法を教えて頂けると大変助かります!

SELECT
--表示するデータ
・・・
・・・
・・・
FROM
(Aテーブル(重複件数を抽出をするAテーブルと同じ)
LEFT OUTER JOIN
Bテーブル(他テーブル)
ON
Aテーブル.○○ = Bテーブル.○○)
LEFT OUTER JOIN
Cテーブル(他テーブル)
ON
Aテーブル.△△ = Cテーブル.△△
WHERE
Aテーブル.■■='1'
ORDER BY
Aテーブル.◎◎

以上になります。教えていただけると大変助かります。よろしく御願いします。

お礼日時:2009/10/29 13:21

これでどうですか?



SELECT
a.ID,a.名前,a.郵便番号,a.住所,
CASE WHEN b.CNT>1 THEN 1 ELSE 0 END 番号
FROM Aテーブル a
INNER JOIN
(SELECT 住所,COUNT(DISTINCT 郵便番号) CNT
FROM Aテーブル
GROUP BY 住所) b ON b.住所=a.住所
ORDER BY a.ID

この回答への補足

SELECT文ではなく、
Aテーブルを更新するという意味で、
UPDATEを使用することも可能でしょうか。

こちらも教えていただけると助かります!!

補足日時:2009/10/29 01:27
    • good
    • 0
この回答へのお礼

jamshid6様

いつもお世話になっております。早速試してみます!
結果はまた報告させていただきますね。

一先ずお礼まで。

お礼日時:2009/10/29 01:10

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