以下の SELECT ステートメントは、後で JSON に送信されるデータを取得するために使用しているストアド プロシージャからのものです。
SELECT *
FROM (
SELECT CAST(DateTimeUTC as SmallDateTime) as [DateTime], DataValue, VariableID
FROM DataValues
WHERE SiteID = @siteID and VariableID BETWEEN 9 and 10 and DateTimeUTC >= DATEADD (day, @pastDays, getdate())
) TableDate
PIVOT (SUM(DataValue) FOR VariableID IN ([9],[10])) PivotTable ORDER BY [DateTime]
私が達成したいのは、ピボットする列範囲を受け入れるように手順を変更することです。上記の例では、2 つの変数の値のみを取得しています。VariableID 1 ~ 10、または 1 ~ 50 を取得したい場合はどうすればよいですか? 以下以外の方法で 1 から 10 を取得する方法が必要です。
VariableID IN ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])
MSDNのUsing PIVOT and UNPIVOTには、範囲を指定する方法が記載されていません。
ストアド プロシージャで動的 SQL を使用できることは認識していますが、SQL に関する私自身の知識と、この長期にわたって維持する必要がある人々の知識を考えると、動的 SQL を使用してさらに複雑にすることには躊躇します。ここには概念的に同様の質問があります。TSQL Pivot Long List of Columnsを参照してください。動的 SQL ソリューションで回答されています。