2009-08-07 12 views
1

エンティティ属性テーブルをピボットする方法はありますか? いくつの属性があるかにかかわらず、すべての行を列に入れたいと思っています。SQLピボットテーブル

これは私が達成したいものの例です。この例では、FirstName、LastNameという2つの属性を使用しています。しかし、実際のデータベースでは、何千もの属性があり、レポートの目的でそれらを列に変換したいと考えています。

すべての属性に対してCTEを書く必要はありません。

USE TempDB 
DECLARE @Attribute TABLE(
AttributeID Int Identity(10,1) PRIMARY KEY, 
AttributeName Varchar(MAX)) 
INSERT INTO @Attribute(AttributeName) VALUES('Firstname') 
INSERT INTO @Attribute(AttributeName) VALUES('Lastname') 
DECLARE @tbl TABLE(
AttributeID Int, 
EntityValue Varchar(MAX) 
) 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(10,'John') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(10,'Paul') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(10,'George') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(10,'Ringo') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(11,'Lennon') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(11,'McCartney') 
INSERT INTO @tbl(AttributeID,EntityValue) VALUES(11,'Harrison') 
SELECT A.AttributeID,AttributeName,EntityValue FROM @tbl T 
INNER JOIN @Attribute A 
ON T.AttributeID=A.AttributeID 


DECLARE @Tbl2 Table(
FirstName Varchar(MAX), 
LastName Varchar(MAX) 
) 
INSERT INTO @Tbl2(FirstName,LastName) VALUES('John','Lennon') 
INSERT INTO @Tbl2(FirstName,LastName) VALUES('Paul','McCartney') 
INSERT INTO @Tbl2(FirstName,LastName) VALUES('George','Harrison') 
INSERT INTO @Tbl2(FirstName) VALUES('Ringo') 
SELECT * FROM @Tbl2 

答えて

0

あなたの投稿に基づいて、SQL Serverを扱っています。

古い学校の方法は、IFまたはCASEステートメントを使用して、作成する各列を表すことです。 IE:

CASE WHEN t.AttributeID = 10 THEN t.EntityValue ELSE NULL END 'FirstName' 

代替PIVOT(SQL Serverを2005+)を使用することです。

どちらの場合でも、出力列を手動で定義する必要があります。モデリングを設定してそれに対処すると、動的SQLを使用できる可能性があります。

+0

どうすればいいですか? –

+1

CASEを、指定した例とより同期するように更新しましたが、IF/CASEまたはPIVOTが行を列に変換する唯一の手段です。 –

0

Microsoft SQL ServerのPIVOT演算子が "動的"でなく、ピボットする各値を指定する必要がある理由は、PIVOTクエリのテーブル構造を識別できるということですクエリテキストだけからこれはほとんどのプログラミング言語の重要な原則です。式から式の型を判別することは可能です。型は、式に記述されているものの実行時の値に依存すべきではありません。

つまり、SQLの実装によっては、必要なものが実装されます。たとえば、Microsoft AccessはTRANSFORMでこれを行います。

ウェブで「動的ピボット」を検索すると、多くのものが見つかります。

関連する問題