質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

24757閲覧

列番号を指定するクエリについて

退会済みユーザー

退会済みユーザー

総合スコア0

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/02/23 06:14

編集2017/02/23 09:33

列番号を指定して、テーブルのx列目以降を指定するSELECT文って書けますでしょうか?

何故こんなことをしたいかというと、
1列目から9列目までのレイアウトが同じで(列名も同じ)
10列目以降の列数・列名は異なるようなテーブルが複数あり、
これらのテーブルから10列目以降だけを取得するクエリを作りたいです。

使っているのはSQLServerです。
SQLには疎く、調べてもわからなかったので質問させて頂きました。

ご質問を受けての追記になります。
列とはカラムのことを指しています。
masaya_ohashiさんの言い方を引用させて頂くと、
エクセルで言うところのK列目以降が欲しいということです。

SQLServerのバージョンは
SQLServer 2012です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaya_ohashi

2017/02/23 07:41 編集

列とは一般的に横方向のことを指しますが、質問文の列はほんとに列のことですか?エクセルでいうとABCのほうが列で、123のほうが行ですよ。エクセルでいうとK以降の右側がほしいのか、10行目以降の下側がほしいのか、どちらでしょう?
退会済みユーザー

退会済みユーザー

2017/02/23 07:55

すみません。列と言わずにカラムと言ったほうがよろしかったですね。おっしゃる通りエクセルで言うところのK列目以降が欲しいといった内容です。
guest

回答5

0

ベストアンサー

SQLServerでSQLを使ってテーブルのカラム名(項目名)を取得する を参考に列番号から列名を求め、そこから SQL 文を組み立ててみてはいかがでしょうか?

追記

作ってみました。
テーブル名は table1 となっていますので、適宜書き換えてください。
私ならパラメータを使うか {0} として string.Format() を使います。

SQL

1declare @result varchar(8000); 2declare @s varchar(8000); 3declare @seperator varchar(2); 4 5declare c cursor for 6select column_name 7from information_schema.columns 8where table_name = 'table1' and ordinal_position > 10; 9 10set @result = 'select '; 11set @seperator = ''; 12open c; 13while 0 = 0 14begin 15 fetch next from c into @s; 16 if @@fetch_status = 0 17 begin 18 set @result += @seperator; 19 set @result += @s; 20 set @seperator = ', '; 21 continue; 22 end 23 else 24 begin 25 break; 26 end 27end 28close c; 29deallocate c; 30 31set @result += ' from table1' 32execute(@result);

投稿2017/02/23 08:04

編集2017/02/23 12:09
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/23 08:39

ご教示頂いたサイトを参考に以下のクエリを実行しましたが、 列名の取得はできませんでした。 SELECT syscolumns.name FROM syscolumns INNER JOIN sysobjects ON sysobjects.id = syscolumns.id WHERE sysobjects.name = '[データベース名].[スキーマ名].[テーブル名]' 正常に実行はされますが、結果が何も得られませんでした。
alg

2017/02/23 08:47

sysobjects.name = ... の右辺は '[データベース名].[スキーマ名].[テーブル名]' ではなく 'テーブル名' では?
Zuishin

2017/02/23 08:49

それでは、取得するテーブル名が table だとして、select COLUMN_NAME, ORDINAL_POSITION from information_schema.columns where TABLE_NAME = 'table' を試してみてください。
退会済みユーザー

退会済みユーザー

2017/02/23 09:14

列名の取得できました!ありがとうございます。その後はどうしたらいいでしょう。。。SELECT句にうまいこと入れたいです。。。
Zuishin

2017/02/23 09:48

この SQL はどうやって発行していますか? JavaScript ですか?
退会済みユーザー

退会済みユーザー

2017/02/23 10:00

発行はC#で作成するアプリ内で行います。レコード数が多いため、なるべく負荷をかけないようにするために、できれば一回のクエリで取得したい、かつ全列の取得はしたくないといった状況です。
退会済みユーザー

退会済みユーザー

2017/02/23 12:45

ありがとうございました!無事やりたいことができました。このクエリは何かと使うことがありそうなので永久保存致します<(_ _)>
guest

0

テーブル名もカラム名もわからないということはないでしょうから
viewを作っておくという選択肢はないのでしょうか?

投稿2017/02/23 11:04

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/23 11:31

viewを追加するのは、諸事情によりちょっと厳しいです。
guest

0

カラム番号は「ORDER BY 2」の様に指定すること以外ではできるようなことはどこにもありませんね。
取り出した後のレコードセットでなら指定できますが・・・。

なので、カラム名を取り出して、共通にあるカラム名以外を取得するような事を考えてはどうでしょうか?

【SQL Server】SQLでテーブルの項目名を取得する

ただ、これもSQL Serverのバージョンによってはやり方が異なる可能性があります。

投稿2017/02/23 08:51

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/23 09:47

テーブル名の取得はできたのですが、そこからの組み立てが全く見当が付きません。。。
guest

0

SELECTとFROMの間に、10列目以降のすべてのカラムの名前をカンマ区切りで記述してください。

投稿2017/02/23 08:44

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/02/23 11:29

他のテーブルに対しても汎用的に使えるようにしたいので、直接列名を定義することはできないです。。。
guest

0

###訂正
以下の回答は質問文の意図を汲み違えた回答ですので無視してください。

SQLServer2012以降であればOFFSET-FETCH文で◯行目以降◯行文が指定できます。
https://technet.microsoft.com/ja-jp/library/gg699618(v=sql.110).aspx

投稿2017/02/23 07:46

編集2017/02/23 08:57
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問