

非常に初歩的な事で恐縮ですが、
以下のデータを抽出する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
-
GROUP BYを行った後に結合したい。
Oracle
-
sqlserverにはグループ集計のfirstとlastがありません??
SQL Server
-
-
4
[SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい
その他(データベース)
-
5
group byで最後のレコードを抽出したい
MySQL
-
6
ORACLEで一番最初の結果だけを取る方法
Oracle
-
7
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
8
SQLで部分的にGROUP BYしたいとき
Oracle
-
9
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
10
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
11
Oracle:グループごとに最大日付の行を1件取得
Oracle
-
12
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
13
oracle sqlで先頭の1件を取得
Oracle
-
14
データベースのINT型項目にNULLはNG?
MySQL
-
15
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
16
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
17
【PL/SQL】FROM区に変数を使う方法
Oracle
-
18
SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか
MySQL
-
19
カーソル0件の時にエラーを発生させる
Oracle
-
20
一部のカラムでdistinctし全てのカラムを取得
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
列のヘッダーを含めるのをデフ...
-
Access:クエリーにて集計後に...
-
UPDATE文のWHERE条件に他のテー...
-
列番号による項目の取得について
-
SQLで列名を変数にできないでし...
-
複数列の最大値を求めたい
-
SQLです教えてくださいお願いし...
-
特定の列だけをGROUP BYしたい時
-
Accessでの全データから空白削除
-
Accessのリストボックスについて
-
テーブル列数とデータファイル...
-
【VB.NET】日付型の列にNULLを...
-
Oracle8でテーブルの列名を変更...
-
identity属性の列に自動採番(SQL)
-
ストアドプロシージャに複数のS...
-
SQLのクエリ、又はプロシージャ...
-
表計算(Excel,Acce...
-
SQLによる"あいうえお"順でソー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
UPDATE文のWHERE条件に他のテー...
-
SQLで列名を変数にできないでし...
-
列番号による項目の取得について
-
列のヘッダーを含めるのをデフ...
-
Access:クエリーにて集計後に...
-
【VB.NET】日付型の列にNULLを...
-
SQLによる"あいうえお"順でソー...
-
テーブル列数とデータファイル...
-
Excel の簡単な操作について
-
ふと疑問
-
特定の文字列で列を区切るには?
-
v$processのPROGRAM列に関する質問
-
複数列の最大値を求めたい
-
エクセルでワイルドカード検索...
-
Accessでの全データから空白削除
-
列の数字を足し合わせたい
-
EXCEL 集計の方法
-
SQL文の関数らしいのですが、意...
おすすめ情報