0

サブクエリからSELECTクエリのフィールド名を指定することはできますか? たとえば、ピボット テーブルを返す次のクエリがあります。

SELECT [Rank], [a], [b], [c], [d], [e], [f], [g], [h]
FROM
(SELECT [File], [Rank], [Piece]
FROM [TableName])
AS [SRC]
PIVOT
(MAX([Piece])
FOR [File]
IN ([a], [b], [c], [d], [e], [f], [g], [h]))
AS [PVT]
ORDER BY [Rank] DESC

したがって、基本的には、これらの「[a]、[b]、[c]、[d]、[e]、[f]、[g]、[h]」を動的に生成する(パラメーターに依存する)必要があります。 #TempTable など、別のクエリからの結果。ある種の Eval() 関数を使用する必要があると思います (もちろん存在する場合)。私はそれを次のようにしたい:

SELECT [Rank], Eval("SELECT ... FROM ...")
FROM
(SELECT [File], [Rank], [Piece]
FROM [TableName])
AS [SRC]
PIVOT
(MAX([Piece])
FOR [File]
IN ( Eval("SELECT ... FROM ...") ))
AS [PVT]
ORDER BY [Rank] DESC
4

1 に答える 1

0

Tobberoth のおかげで、必要なコードは次のようになります。

DECLARE @filelist varchar(MAX) =
STUFF(
(SELECT DISTINCT ', [' + [File] + ']'
FROM [#TempTableName]
FOR XML PATH(''))
,1,1,'')

DECLARE @query varchar(MAX) = 
'SELECT [Rank], ' + @filelist + '
FROM
(SELECT [File], [Rank], [Piece]
FROM [TableName])
AS [SRC]
PIVOT
(MAX([Piece])
FOR [File]
IN (' + @filelist + '))
AS [PVT]
ORDER BY [Rank] DESC'

EXECUTE (@query)
于 2015-04-09T11:49:54.433 に答える