

非常に初歩的な事で恐縮ですが、
以下のデータを抽出する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で質問しましょう!
似たような質問が見つかりました
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
このQ&Aを見た人はこんなQ&Aも見ています
-
SELECTで1件のみ取得するには?
Oracle
-
sqlserverにはグループ集計のfirstとlastがありません??
SQL Server
-
GROUP BYを行った後に結合したい。
Oracle
-
-
4
[SQL]重複内容を持つデータから1件抽出かつ複数のカラムを表示したい
その他(データベース)
-
5
group byで最後のレコードを抽出したい
MySQL
-
6
SQLで部分的にGROUP BYしたいとき
Oracle
-
7
ORACLEで一番最初の結果だけを取る方法
Oracle
-
8
SQLで特定の項目の重複のみを排除した全項目を取得する方法
その他(プログラミング・Web制作)
-
9
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
10
Oracle:グループごとに最大日付の行を1件取得
Oracle
-
11
一部のカラムでdistinctし全てのカラムを取得
MySQL
-
12
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
13
SQL*LoaderでCSVから指定した列のみインポートしたい。
Oracle
-
14
oracle sqlで先頭の1件を取得
Oracle
-
15
各伝票に対して明細を1行目だけ表示したい
SQL Server
-
16
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
17
データベースのINT型項目にNULLはNG?
MySQL
-
18
カーソル0件の時にエラーを発生させる
Oracle
-
19
検索対象のデータが「複数レコード」を「1レコード」として獲得するSQL
Oracle
-
20
Oracle 2つのDate型の値の差を「分」で取得したい
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部参照してるキーを主キーに...
-
SELECT 文 GROUP での1件目を...
-
UPDATE文のWHERE条件に他のテー...
-
列番号による項目の取得について
-
SQLで列名を変数にできないでし...
-
【VB.NET】日付型の列にNULLを...
-
Access:クエリーにて集計後に...
-
SQLによる"あいうえお"順でソー...
-
特定の列だけをGROUP BYしたい時
-
テーブル列数とデータファイル...
-
”+”の符号をつける方法
-
エクセルの列見出しが飛んでいます
-
列のヘッダーを含めるのをデフ...
-
DB2のSQL
-
identity属性の列に自動採番(SQL)
-
IDENTITY列の更新で失敗する
-
SQLです教えてくださいお願いし...
-
Accessでの全データから空白削除
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SELECT 文 GROUP での1件目を...
-
外部参照してるキーを主キーに...
-
UPDATE文のWHERE条件に他のテー...
-
SQLで列名を変数にできないでし...
-
列番号による項目の取得について
-
列のヘッダーを含めるのをデフ...
-
【VB.NET】日付型の列にNULLを...
-
Access:クエリーにて集計後に...
-
テーブル列数とデータファイル...
-
特定の列だけをGROUP BYしたい時
-
特定の文字列で列を区切るには?
-
SQLによる"あいうえお"順でソー...
-
Accessのリストボックスについて
-
複数列の最大値を求めたい
-
項目名に大文字と小文字の混在...
-
IDENTITY列の更新で失敗する
-
Accessでの全データから空白削除
-
DB2のSQL
-
レプリケーション 列名を変更...
-
v$processのPROGRAM列に関する質問
おすすめ情報