2016-02-11 12 views
5

文字列だけを含むピボットテーブルを作成しようとしています。ピボットテーブルのNULL値を置き換える方法は?

これは私のテーブルの簡易版である:

CREATE TABLE SecurityGroup (GroupName VARCHAR(20), SecLevel VARCHAR(20),  Power VARCHAR(20)) 
INSERT INTO SecurityGroup 
SELECT 'GroupA','Level1','read' 
UNION 
SELECT 'GroupA','Level2','write' 
UNION 
SELECT 'GroupA','Level3','read' 
UNION 
SELECT 'GroupA','Level4','read' 
UNION 
SELECT 'GroupA','Level4','write' 

私は、次の結果セットに

期待

GroupName Level1 Level2 Level3 Level4 
GroupA  read  write  read  read 
GroupA  read  write  read  write 

私が持っている問題を取得するために、PIVOT機能を使用したいですLevel1〜Level3の値は1回だけ存在し、Level4は2つの異なる値を持つということです。だから私はいつもこのResultSetを取得しています:私はこのコード

SELECT 
[GroupName], 
[Level1], 
[Level2], 
[Level3], 
[Level4] 
FROM 
(SELECT 
[GroupName], 
[SecLevel], 
[Power], 
ROW_NUMBER() OVER(PARTITION BY [GroupName], [SecLevel] ORDER BY [Power]) AS rn 
FROM [SecurityGroup]) AS SourceTable 
PIVOT 
(MAX([Power]) 
    FOR [SecLevel] 
    IN ([Level1], [Level2], [Level3], [Level4]) 
) AS PivotTable 

任意のアイデアをどのようにこの問題を解決するを使用してい

GroupName Level1 Level2 Level3 Level4 
GroupA  read  write  read  read 
GroupA  NULL  NULL  NULL  write 

リアリティ?ソーステーブルのLevel1〜Level3に値を追加することはできません。

ROW_NUMBER()の代わりにRANK()を使用しようとしましたが、動作しませんでした。

ありがとうございました。

+0

苦労して書くことができますが、私の考えは、Level1〜Level3の値を追加してテーブルの代わりにCTEから選択するCTEまたは一時テーブルを使用することです。実際のテーブルは変更する必要はありません。よりエレガントなものがあるはずですが、私はそれを思いつきません。 –

+0

あなたのPIVOTが正しい結果を返す入力結果セットを見てください! GroupAという名前の2つの異なるグループがあります。 1つはすべての4つのレベルの値を持ち、もう1つはレベル4しか持っていません。 –

+0

btw、なぜRowNumberを生成していますか? –

答えて

2
SELECT 
[GroupName], 
MAX([Level1]) OVER (PARTITION BY [GroupName]) [Level1], 
MAX([Level2]) OVER (PARTITION BY [GroupName]) [Level2], 
MAX([Level3]) OVER (PARTITION BY [GroupName]) [Level3], 
[Level4] 
FROM 
(SELECT 
[GroupName], 
[SecLevel], 
[Power], 
ROW_NUMBER() OVER(PARTITION BY [GroupName], [SecLevel] ORDER BY [Power]) AS rn 
FROM [SecurityGroup]) AS SourceTable 
PIVOT 
(MAX([Power]) 
    FOR [SecLevel] 
    IN ([Level1], [Level2], [Level3], [Level4]) 
) AS PivotTable; 
+0

ありがとうございました!このバージョンは機能しました。 –

関連する問題