文字列だけを含むピボットテーブルを作成しようとしています。ピボットテーブルの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()を使用しようとしましたが、動作しませんでした。
ありがとうございました。
苦労して書くことができますが、私の考えは、Level1〜Level3の値を追加してテーブルの代わりにCTEから選択するCTEまたは一時テーブルを使用することです。実際のテーブルは変更する必要はありません。よりエレガントなものがあるはずですが、私はそれを思いつきません。 –
あなたのPIVOTが正しい結果を返す入力結果セットを見てください! GroupAという名前の2つの異なるグループがあります。 1つはすべての4つのレベルの値を持ち、もう1つはレベル4しか持っていません。 –
btw、なぜRowNumberを生成していますか? –