列ヘッダーを行に変換し、その前にデータを表示したいと考えています。どなたかご存知の方がいらっしゃいましたらよろしくお願いします。ピボットしてみましたが、あまり役に立ちませんでした。
質問する
390 次
2 に答える
0
サンプルは http://technet.microsoft.com/ から取得
USE AdventureWorks2008R2 ;
GO
SELECT DaysToManufacture, AVG(StandardCost) AS AverageCost
FROM Production.Product
GROUP BY DaysToManufacture;
これが結果セットです。
DaysToManufacture AverageCost
0 5.0885
1 223.88
2 359.1082
4 949.4105
DaysToManufacture が 3 で定義されている製品はありません。次のコードは、DaysToManufacture 値が列見出しになるようにピボットされた同じ結果を表示します。結果が NULL であっても、列は 3 [3] 日間提供されます。
-- Pivot table with one row and five columns
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,
[0], [1], [2], [3], [4]
FROM
(SELECT DaysToManufacture, StandardCost
FROM Production.Product) AS SourceTable
PIVOT
(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3], [4])
) AS PivotTable;
これが結果セットです。
Cost_Sorted_By_Production_Days 0 1 2 3 4
AverageCost 5.0885 223.88 359.1082 NULL 949.4105
于 2013-09-06T10:15:37.277 に答える
0
データのピボットを解除する必要があるようです。アンピボットのプロセスにより、複数の列が複数の行に変換されます。使用しているデータベースを指定しなかったので、いくつかの解決策を提供します。
次のサンプル データがあるとします。
create table yourtable
(
id int,
name varchar(50),
class1 varchar(50),
class2 varchar(50),
class3 varchar(50),
class4 varchar(50)
);
insert into yourtable
values
(1, 'John', 'Science', 'Math', 'Chem', 'Physics'),
(2, 'Bob', 'Math', 'SS', 'Bio', 'Chem'),
(3, 'Jim', 'Econ', 'Math', 'Bio', 'Sci'),
(4, 'Sally', 'Crim', 'Bio', 'Math', 'Chem');
データベースに SQL Server や Oracle のような UNPIVOT 関数がない場合は、UNION ALL クエリを使用して結果を取得できます。
select id, name, 'class1' col, class1 value
from yourtable
union all
select id, name, 'class2' col, class2 value
from yourtable
union all
select id, name, 'class3' col, class3 value
from yourtable
union all
select id, name, 'class4' col, class4 value
from yourtable;
デモで SQL Fiddle を参照してください
UNPIVOT 関数をサポートするデータベースを使用している場合、クエリの構文は次のようになります。
select id, name, col, value
from yourtable
unpivot
(
value
for col in (class1, class2, class3, class4)
) unpiv
于 2013-09-06T11:11:32.483 に答える