

非常に初歩的な事で恐縮ですが、
以下のデータを抽出するsql文の書き方を模索しています。
環境:SQLSERVER2005
| 列1| 列2 |
+---+---+
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
| 2 | F |
| 2 | G |
| 2 | H |
| 3 | X |
| 3 | Y |
| 3 | Z |
上記のテーブルがあるとします。
列1でグループした値で、1レコード目の列2を抽出したいのです。
出力結果としては、
列1列2
+--+--+
1,A
2,F
C,X
としたいのです。
列1でGROUPしてしまうと列2の内容を集約しないといけないので困っています。
ご教授いたけないでしょうか?
No.3ベストアンサー
- 回答日時:
SQL Server 2005では、Oracleでいう分析関数が実装されています。
select
列名1,
列名2
from
(select
rank() over(partition by 列1 order by 列2) as rk,
列1,列2
from 表名) as x
where rk=1
chukenkenkouさん
アドバイス有難う御座いました。
お返事が遅くなり申し訳ありませんでした。
まさにこれです。
partitionと言う関数があったのですね。
有難う御座いました。
No.2
- 回答日時:
#本題と関係ありませんが・・
いや、「1アイテム目」が「必ず昇順に返ってくる」とか「登録順に返ってくる」とか「物理的な配置順に返ってくる」という保証は、いかなるデータベースでもあり得ません。orderを指定しなければ「順不同(になることもある)」がデータベースです。SQLServerも例外ではありません。
アドバイスありがとうございます。
もちろん、先頭抽出条件においてはorder等のデータ整列調整は行います。
有難う御座いました。
No.1
- 回答日時:
列2の「1レコード目」というのがどういう意味かわかりませんが(データベースではorderがない状態で1レコード目という概念はあり得ないので)「最小のもの」でよければ
select 列1, min(列2) as 列2_min from テーブル group by 列1
でいいと思います。
shimixさん
回答ありがとうございました。
1レコード目と言うのはおかしな表現でした。
失礼致しました。
1アイテム目と言う事で有ってますでしょうか。
>select 列1, min(列2) as 列2_min from テーブル group by 列1
なるほど、値を大小区別できるように抽出しておいてやれば、取得出来ますね。また、別の列にROW_NUMBERを切ってやれば大小関係なく抽出できそうです。
有難う御座いました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
SELECTで1件のみ取得するには?
Oracle
-
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
[SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい
その他(データベース)
-
-
4
sqlserverにはグループ集計のfirstとlastがありません??
SQL Server
-
5
GROUP BYを行った後に結合したい。
Oracle
-
6
group byで最後のレコードを抽出したい
MySQL
-
7
ORACLEで一番最初の結果だけを取る方法
Oracle
-
8
Oracle:グループごとに最大日付の行を1件取得
Oracle
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
SQLで部分的にGROUP BYしたいとき
Oracle
-
11
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
12
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
13
データベースのINT型項目にNULLはNG?
MySQL
-
14
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
15
検索対象のデータが「複数レコード」を「1レコード」として獲得するSQL
Oracle
-
16
単一グループのグループ関数ではありません。
Oracle
-
17
テーブルからのselectにおいてデータの有無により結果をわけたい
PostgreSQL
-
18
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
19
oracle sqlで先頭の1件を取得
Oracle
-
20
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
特定の文字列で列を区切るには?
-
v$processのPROGRAM列に関する質問
-
UPDATE文のWHERE条件に他のテー...
-
SQLで列名を変数にできないでし...
-
列のヘッダーを含めるのをデフ...
-
テーブル列数とデータファイル...
-
Accessのリストボックスについて
-
SELECT 文 GROUP での1件目を...
-
IDENTITY列の更新で失敗する
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
フィルターかけた後、重複を除...
-
Outlook 送受信エラー
-
SQLServerで文字列の末尾からあ...
-
カーソル宣言をIFで分けられま...
-
ActiveReportの改ページ不具合...
-
access2021 VBA メソッドまたは...
-
戦争反対を英語で?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字列で列を区切るには?
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
列のヘッダーを含めるのをデフ...
-
SQLで列名を変数にできないでし...
-
UPDATE文のWHERE条件に他のテー...
-
Access:クエリーにて集計後に...
-
【VB.NET】日付型の列にNULLを...
-
列番号による項目の取得について
-
SQLです教えてくださいお願いし...
-
Accessでの全データから空白削除
-
Accessのリストボックスについて
-
特定の列だけをGROUP BYしたい時
-
テーブル列数とデータファイル...
-
AccessのデータをExcelに抽出
-
v$processのPROGRAM列に関する質問
-
重複データの抽出方法(複数項目)
-
SQLite3 の UpdateCommand エラー
-
IDENTITY列の更新で失敗する
-
SQLで一時的に表示変更するには...
おすすめ情報