SQL結果の列の行を変換する問題があります。集計なしのSQLピボット
私の構造は次のとおりです。
GUID |プロパティ名| PropertyValue
abcd | | cn = abcd ...
abcd | CN | cn = GROUP_
abcd |オペレーション| ADD
1231 | | cn = 123dd
1231 | Cn | cn = ASDGRUOP
1231 |オペレーション| Del
私が以前知っていたn個のPropertyNamesは、動的に存在することがあります。問題なくSQLを使用して取得できます。
私はこのような構造をしたい: GUID | | CN |操作
abcd | cn = abcd ... | cn = GROUP_ | ADD
1231 | cn = 123dd | cn = ADSGROUP | DEL
など。
select @cols = STUFF ((SELECT DISTINCT '],[' + x.ParameterName from ... and parametername in ('PropertyValue','DistinguishedName', 'Operation')
FOR XML PATH ('')),1,2,'') + ']'
私はPIVOT-機能でこれを行うことができますが、私は集約を持っていけないので、私は正しい結果を得るカント:
set @query = N'SELECT '+ @cols + ' FROM (
SELECT x.parametervalue, x.parametername
from ... and parametername in (''PropertyValue'',''DistinguishedName'', ''Operation'')
) a
PIVOT (max(a.parametervalue) FOR ParameterName in (' + @cols + ')) as pv;'
exec sp_executesql @query;
を私は、このSQLによって取得
コラム、ヘッダ次の結果が得られます。
GUID | | CN |オペレーション| ...その他のプロパティ
abcd | cn = abcd ... | cn = GROUP_ | ADD | ...
1つの結果 - それ以上はありません。しかし、MAX()関数のためにこのクエリから700の結果があります。私は1つだけを取得します。すべての結果を得るために集計なしでピボットを取得するにはどうすればよいですか?
ありがとうございました!ここ
*完全な例がないと手伝いが難しいです。あなたは近くにいる。 'PIVOT'演算は常に1つの行を生成するので、あなたがピボットする* resultset *に' GUID'カラムと 'parameter'カラムのそれぞれが含まれていることを確認する必要があります。 * PIVOTの一部ではない結果セット内の列の値。 –