在视图中解决方法DECLARE语句

时间:2017-07-20 01:39:46

标签: sql database dynamic-sql

我有以下内容我希望成为View,但显然不允许Declare语句。

这个问题的最佳解决方案/解决办法是什么?

我正在使用SQL Server。我已经尝试了许多其他解决方案(存储过程,表值函数),但我认为动态SQL的组合使问题变得复杂,我无法获得任何工作。

DECLARE @cols AS NVARCHAR(MAX),
    @colsAlias AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(MeasurementTypeID) 
            FROM dbo.Measurements
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

SELECT @colsAlias = STUFF((SELECT DISTINCT ',' + QUOTENAME(dbo.Measurements.MeasurementTypeID) + ' AS ' + QUOTENAME(dbo.MeasurementTypes.MeasurementType)  
    FROM dbo.Measurements INNER JOIN dbo.MeasurementTypes ON dbo.Measurements.MeasurementTypeID = dbo.MeasurementTypes.MeasurementTypeID
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'),1,1,'')

SET @query = 'SELECT NeuronID, ' + @colsAlias +' FROM
(
SELECT MeasurementName, MeasurementValue, NeuronID, MeasurementTypeID
FROM dbo.Measurements
) x
PIVOT
(
MIN(MeasurementValue) FOR MeasurementTypeID IN (' + @cols + ')
) AS p'

EXECUTE(@query)

0 个答案:

没有答案