プロが教える店舗&オフィスのセキュリティ対策術

viewにidentity列を追加したいのですが、SQL文が分からなくて困っています。
追加する方法をご存知の方がいましたらよろしくお願いします。

作りたいviewは以下のようなviewです。

・テーブルA
ID  NAME   ADDRESS
1   山田    東京
2   鈴木    埼玉
3   田中    千葉
4   佐藤    埼玉
5   藤田    東京
6   石田    神奈川
7   松田    千葉

・作成したいview

ID  ADDRESS  出身人数
1   神奈川      1
2    埼玉      2
3    千葉      2 
4    東京      2

↑このID列をidentity列にしたいと考えています。
使用しているDBはH2です。よろしくお願いします。

A 回答 (2件)

H2を良く知らないのですが、一般的には、group byとRownum()とを一緒に使うと


うまくいかないのではなかったかと。

SELECT ROWNUM ( ) AS ID,ADDRESS,COUNT(*) AS 出身人数
FROM SAMPLE
GROUP BY ADDRESS
ではなく、
SELECT ROWNUM ( ) AS ID,ADDRESS,出身人数
from
(
select ADDRESS,COUNT(*) AS 出身人数
FROM SAMPLE
GROUP BY ADDRESS
)
とするとうまくいくのでは?

ANO.1の方が示しておられるURLの
The first row has the row number 1, and is calculated before ordering and grouping the result set・・・
To get the row number after ordering and grouping, use a subquery.
というのが、
「group byの前に連番振りますよ、但し・・・。
サブクエリを使うと、group byの後に連番を振りますよ。」(適当な意訳ですけど)
つまり上記の意味です。
    • good
    • 0
この回答へのお礼

返事が遅くなってしまい申し訳ありません。
ご回答の通りにやってみたらできました。参考になりました。
本当にありがとうございました。

お礼日時:2013/01/19 20:48

rownumとかrow_numberでなんとかなりませんかね。


http://www.h2database.com/html/functions.html#ro …
    • good
    • 0
この回答へのお礼

rownumを使って以下のSQL文を書いてみたのですが

CREATE VIEW TESTView AS
SELECT ROWNUM ( ) AS ID,ADDRESS,COUNT(*) AS 出身人数
FROM SAMPLE
GROUP BY ADDRESS

以下のような結果になってしまいました。

ID  ADDRESS  出身人数
7   東京    2
7   埼玉    1
7   神奈川   2 
7   千葉    2

申し訳ありませんが、指摘事項がありましたらお願いします。

お礼日時:2013/01/16 10:34

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