スクリーンショットが添付されています。私は入力と必要な出力の両方を述べました。私は出力を得るために、SQLサーバー2008/2012クエリが必要です。あなたはPIVOTを使用する必要がSQL SERVER 2008行を複数の列に変換するためのクエリ
0
A
答えて
0
あなたは、動的SQLクエリを使用することができます。
クエリ
declare @sql as varchar(max);
select @sql = 'select ' + stuff((
select ', max(case StudentID when '
+ cast(t.StudentID as varchar(10))
+ ' then StudentKey end) as StudentID'
+ cast(t.StudentID as varchar(10))
+', max(case StudentID when ' + cast(t.StudentID as varchar(10))
+ ' then StudentName end) as StudentName'
+ cast(t.StudentID as varchar(10))
from (select distinct top 3 * from studentTable order by StudentID)t
for xml path('')
), 1, 2, '') + ' from studentTable;';
exec(@sql);
そしてこれには、1 StudentId、その後StudentNameとのcoulmn順に結果が得られます。以下のようなものもあります。
結果
+------------+--------------+------------+--------------+------------+--------------+
| StudentID1 | StudentName1 | StudentID2 | StudentName2 | StudentID3 | StudentName3 |
+------------+--------------+------------+--------------+------------+--------------+
| 125 | A | 225 | B | 325 | C |
+------------+--------------+------------+--------------+------------+--------------+
そして、あなたはまず、すべてのstudentId欄のような結果studentName列をしたい場合。その後
クエリ
declare @sql as varchar(max);
select @sql = 'select ' + stuff((
select ', max(case StudentID when '
+ cast(t.StudentID as varchar(10))
+ ' then StudentKey end) as StudentID'
+ cast(t.StudentID as varchar(10))
from (select distinct top 3 * from studentTable order by StudentID)t
for xml path('')
), 1, 2, '')
+ ','
+ stuff((
select ', max(case StudentID when '
+ cast(t.StudentID as varchar(10))
+ ' then StudentName end) as StudentName'
+ cast(t.StudentID as varchar(10))
from (select distinct top 3 * from studentTable order by StudentID)t
for xml path('')
), 1, 2, '')
+ ' from studentTable;';
exec(@sql);
結果
+------------+------------+------------+--------------+--------------+--------------+
| StudentID1 | StudentID2 | StudentID3 | StudentName1 | StudentName2 | StudentName3 |
+------------+------------+------------+--------------+--------------+--------------+
| 125 | 225 | 325 | A | B | C |
+------------+------------+------------+--------------+--------------+--------------+
0
。それは次のようなものでなければなりません。 PIVOTの仕組みがわからない場合は、オンラインでチュートリアルを使ってExcel Pivotを試してみて、まずそのロジックをよく理解してください。
WITH PivotData AS
(
SELECT
AssignmentName,
StudentName,
Grade
FROM TableName
)
SELECT
StudentName,
Assignment1,
Assignment2,
Assignment3
FROM PivotData
PIVOT
(
SUM(Grade)
FOR AssignmentName
IN (Assignment1, Assignment2, Assignment3)
) AS PivotResult
ORDER BY StudentName
関連する問題
- 1. SQL Server - 複数の列を複数行に変換する
- 2. OracleクエリをSQL Server 2008に変換
- 3. SQL Server 2008の列を列に変換する
- 4. SQL Server 2008の複数の列フィルタ
- 5. Sql Server 2008 - ローカライズされたDateTime列をUTCに変換する
- 6. SQL Server 2008をMySQLに変換する
- 7. 行の値をSQL Server 2008の列ヘッダーに変換する方法は?
- 8. 異なるデータを含む列をSQL Serverの複数行に変換する
- 9. OracleのクエリにSQL Serverクエリを変換
- 10. MS SQL Server 2008 datetime2をJavaに変換
- 11. SQL Server 2008 R2のPERCENTILE_CONT関数を変換する
- 12. SQL Server複数の行と2つの列を複数の列で1行に変換
- 13. 変換SQL Serverクエリ
- 14. 複数の行を更新するSQL Server 2008
- 15. SQL Server 2008のクエリのサブフォルダ
- 16. SQL Server 2008 - SELECTクエリ
- 17. サブクエリSQL Server 2008の列に行
- 18. SQL Server 2008のクエリで、タイムアウト
- 19. SQL Server 2008の:更新クエリ
- 20. SQL Server 2008データベース間のクエリ
- 21. 月-yyyyテキスト列をSQL Server 2008の日付列に変換する方法
- 22. SQL Server 2008スパース列 - 逆数
- 23. SQL Server 2008 R2 - 複数の列名を変更する方法は?
- 24. sql server 2008複数の列と動的列のピボット
- 25. Sql Server 2008のDateTimeOffsetをDateTimeに変換するには
- 26. SQL Server 2008に挿入するためのテーブル値パラメータ対複数行挿入のパフォーマンスに関する質問
- 27. 2列以上の列に行を変換するSQL Server
- 28. 変更列名PIVOTのSQL Server 2008の
- 29. PL/SQLでログ行を複数の列に変換する
- 30. 列を含めるとクエリのパフォーマンスが向上するSQL Server 2008
*のT-SQLの動的ピボット*は、あなたが検索するために必要なものです。 –
これをチェックしてください:http://stackoverflow.com/questions/15745042/efficiently-convert-rows-to-columns-in-sql-server – TheGameiswar
リンクではなくポストに直接画像を追加しました – Dave