У меня есть следующие строки кода SQL, которые являются частью хранимой процедуры:Как группа средних значений столбца после поворота в SQL Server
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME([vw_Imported_Files].RF_FileName)
FROM [dbo].[vw_Imported_Files] with(nolock)
WHERE [vw_Imported_Files].RF_GUID_ID = @sGUID
AND [vw_Imported_Files].RF_IsEnabled = 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query2 = 'SELECT ROUND(AVG(CAST(RD_Axis AS FLOAT)),3) AS RD_Axis
,' + @cols + ' FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY DenseRank ORDER BY (SELECT NULL))
AS RowNumber, rd.* FROM
(SELECT DENSE_RANK() OVER (ORDER BY rd.RD_RF_ID) AS DenseRank
,rd.RD_Axis AS RD_Axis
,rd.DN_Values AS DN_Values
,rd.RF_FileName AS RF_FileName
FROM #TEMP rd
WHERE rd.RD_GUID_ID = ' + @sGUID + '
AND rd.RD_IsEnabled = 1
) rd
) rn
pivot
(
max(DN_Values)
for RF_FileName in (' + @cols + ')
) p
GROUP BY RD_Axis, ' + @cols + ' '
execute (@query2)
На самом деле, этот запрос (@ Query2) результатов, как показано в следующей таблице.
---------------------------------------------------------------
| 0 | NULL | NULL | 0,996573652935408|
| 0 | NULL | 1,00053003751428 | NULL |
| 0 | 0,999843071844672 | NULL | NULL |
| 0,052 | NULL | NULL | 0,992999630825293|
| 0,052 | 1,02368347072563 | NULL | NULL |
| 0,053 | NULL | 0,992674427713489 | NULL |
| 0,104 | NULL | NULL | 0,998690236570867|
| 0,104 | NULL | 0,996645964692132 | NULL |
| 0,105 | 0,989815140503533 | NULL | NULL |
----------------------------------------------------------------------------
То, что я хочу сделать, чтобы очистить все NULL
значения путем группировки Average
значений RD_Axis, которые имеют одинаковое значение DENSERANK. В текущем случае DenseRank увеличивается каждые 3 строки. Итак, результат, который я хочу, должен выглядеть так, как показано в следующей таблице.
----------------------------------------------------------------------------
| 0 | 0,999843071844672 | 1,00053003751428 | 0,996573652935408|
| 0,052 | 1,02368347072563 | 0,992674427713489 | 0,992999630825293|
| 0,104 | 0,989815140503533 | 0,996645964692132 | 0,998690236570867|
----------------------------------------------------------------------------
Надеюсь найти запрос. Не могли бы вы помочь мне разобраться, как преобразовать вышеуказанный код SQL, чтобы получить желаемый результат?
Пожалуйста, объясните, что * вы пытаетесь сделать, а не * как * вы пытались это сделать. Вам не нужны конкатенации строк и XML для поворота, раскрутки или вычисления агрегатов. Без схемы исходного вида невозможно угадать, что задается, или как это можно решить чистым способом. –