- PR -

TOP 3の取り方

1
投稿者投稿内容
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-12-17 17:39
こんばんは。
SQLServer2005のSELECT文の書き方を
教えて下さい。

得意先 年月   番号
1 07年08月 10
1 07年08月 20
1 07年08月 30
1 07年08月 1
1 07年08月 5

1 07年09月 20
1 07年09月 30
1 07年09月 50
1 07年09月 40

2 07年09月 20
2 07年09月 40

のデータを得意先、年月別に
番号が大きいものを3個までを
横に並べて取得したいのです。

得意先 年月   番号1 番号2 番号3
1 07年08月 30 20 10
1 07年09月 50 40 30
2 07年09月 40 20

という感じです。

ご教授 宜しくお願いします。
よっし〜。
ベテラン
会議室デビュー日: 2007/04/17
投稿数: 89
お住まい・勤務地: 北のほうの国
投稿日時: 2007-12-17 20:25
実現できないSELECT文ではないですが
こんなSELECT文を実用的に使う人は滅多にいないのでは?と思います。

SQLで実現する部分とアプリケーションで実現する部分とを
うまく組み合わせるのが無難かと…
可読性も保全性もそちらのほうが高まります。

コード:

SELECT *
/*一位*/
,(SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月)
/*二位*/
,(SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月
 AND 番号 <> (SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月))
/*三位*/
,(SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月
 AND 番号 <> (SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月)
 AND 番号 <> (SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月 AND 番号 <> (SELECT MAX(番号) FROM TESTA WHERE 得意先=T1.得意先 AND 年月=T1.年月)))
 FROM (SELECT 得意先,年月 FROM TESTA GROUP BY 得意先,年月) AS T1



使わないことをお勧めします。
少なくとも仕様変更に耐えれません。

#列の型は無視してます。
LANVIN
大ベテラン
会議室デビュー日: 2007/03/12
投稿数: 211
投稿日時: 2007-12-19 16:32
よっし〜さん
大変丁寧な回等ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)