C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

グループ別に連番取得する方法を押してください。

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■88758 / inTopicNo.1)  グループ別に連番取得する方法を押してください。
  
□投稿者/ 夜叉丸 (128回)-(2018/09/25(Tue) 10:57:59)

分類:[.NET 全般] 

SQLServer2016 を使用しています。

グループに分けて、連番を取得したいのですが
どうすればよいのでしょうか?

具体的には
A 1
A 2
B 3
A 4
B 5
このようなデータがある場合に
A 1 1
A 2 2
A 4 3
B 3 1
B 5 2
として3列目を取得したいのです。



引用返信 編集キー/
■88759 / inTopicNo.2)  Re[1]: グループ別に連番取得する方法を押してください。
□投稿者/ 魔界の仮面弁士 (1860回)-(2018/09/25(Tue) 11:19:18)
No88758 (夜叉丸 さん) に返信
> グループに分けて、連番を取得したいのですが
> どうすればよいのでしょうか?

CREATE TABLE TBL
( F1 CHAR(1) NOT NULL, F2 INT NOT NULL
, CONSTRAINT KEY_TBL PRIMARY KEY (F1, F2)
)

INSERT INTO TBL (F1, F2) VALUES
('A', 1), ('A', 2), ('B', 3), ('A', 4), ('B', 5)


SELECT F1, F2, F3 = ROW_NUMBER()
OVER (PARTITION BY F1 ORDER BY F2)
FROM TBL ORDER BY F1, F2
引用返信 編集キー/
■88760 / inTopicNo.3)  Re[2]: グループ別に連番取得する方法を押してください。
□投稿者/ 夜叉丸 (129回)-(2018/09/25(Tue) 11:31:34)
早々の回答ありがとうございました。
いろいろ考えて、長いSQLコードつくって失敗していたのですが、
単純にできたんですね
ありがとうございました。

疑問として、
わたしの VisuzlStudio での SQLビューワーでは
ROW_NUMBER はサポートされていませんと表示されます。
ですが、実行自体はできるのでとりあえずは問題ないのですが
ROW_NUMBER がサポートされていないバージョン以前では
どのようにしてSQLコードを書いていたのでしょうね?



解決済み
引用返信 編集キー/
■88761 / inTopicNo.4)  Re[3]: グループ別に連番取得する方法を押してください。
□投稿者/ 魔界の仮面弁士 (1861回)-(2018/09/25(Tue) 12:25:01)
2018/09/25(Tue) 13:44:09 編集(投稿者)

No88760 (夜叉丸 さん) に返信
> わたしの VisuzlStudio での SQLビューワーでは
> ROW_NUMBER はサポートされていませんと表示されます。
Visual Studio のクエリデザイナーは、比較的単純な SQL しか処理できないので、
あまり当てにしない方が良いかも。


> ROW_NUMBER がサポートされていないバージョン以前では
SQL Server 2005 の時点で、ROW_NUMBER 窓関数は使えていましたよね。
https://starzero.hatenablog.com/entry/20100524/1278244716


ROW_NUMBER 関数を使わない手法としては、こんなのとか。
パフォーマンスは落ちますけれども。

SELECT TBL1.F1, TBL1.F2, C = 1 + (
SELECT COUNT(*) FROM TBL AS WK
WHERE WK.F1 = TBL1.F1 AND WK.F2 < TBL1.F2)
FROM TBL AS TBL1
ORDER BY TBL1.F1, TBL2.F2
解決済み
引用返信 編集キー/
■88763 / inTopicNo.5)  Re[4]: グループ別に連番取得する方法を押してください。
□投稿者/ 夜叉丸 (130回)-(2018/09/25(Tue) 16:44:53)
2018/10/02(Tue) 11:34:06 編集(投稿者)

No88761 (魔界の仮面弁士 さん) に返信

AND WK.F2 < TBL1.F2
のところ少し悩みましたが理解できました。
この考えがありませんでした。
なので、長文のSQLになってなおかつ動かなかったんです。

ORDER BY TBL1.F1, TBL2.F2 はエラーになりましたが
ORDER BY TBL1.F1, TBL1.F2 に変更しました。

どうもありがとうございました。


解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ