У меня проблемы с динамическим построением сводной таблицы.При построении строки запроса для выполнения я получаю эту ошибку: Общее табличное выражение определено, но не используется.Вот мой фрагмент кода:
`USE [DatabaseAccessLayer.PhoneBookContext]
DECLARE @COLUMNS AS NVARCHAR(MAX), @QRY_ NVARCHAR(500);
DECLARE @TABLE_ NVARCHAR(10) = 'tempTable'
DECLARE @Month INT = '06';
WITH ColumnNames AS (
SELECT DISTINCT pht.Name AS 'PhoneType'
FROM Records.People pp, Records.PhoneNumberTypes pht, Records.Phones ph
WHERE pp.PersonId = ph.PersonId AND ph.PhoneTypeId = pht.PhoneTypeId AND
MONTH(pp.Birthday) = @MONTH
)-- SELECT * FROM ColumnNames
,ColumnMap AS (
SELECT C.PhoneType
FROM ColumnNames C LEFT JOIN ColNames CN
ON REPLACE(C.PhoneType, C.PhoneType, C.PhoneType + ' Phone') =
CN.ColumnId)--SELECT * FROM ColumnMap
SELECT @COLUMNS = ( SELECT QUOTENAME(PhoneType)+','
FROM ColumnNames AS ColumnName
FOR XML PATH('')
)
SELECT @COLUMNS = SUBSTRING(@COLUMNS, 1, LEN(@COLUMNS)-1);
PRINT @COLUMNS;--testing purpose
WITH tempTable AS(
SELECT TOP (100)pp.FirstName AS Name ---See how to remove top clause --when using ORDER BY???
,CONVERT(NVARCHAR(5), pp.Birthday, 103) AS Birthday
,ph.Number
FROM Records.People pp, Records.Phones ph, Records.PhoneNumberTypes pht
WHERE pp.PersonId = ph.PersonId AND ph.PhoneTypeId = pht.PhoneTypeId
AND MONTH(pp.Birthday) = @Month
ORDER BY 'Birthday', Name
)SELECT @QRY_ = 'SELECT FirstName, Birthday,' + @COLUMNS+'
FROM(SELECT FirstName, Birthday
,Number
FROM' +@TABLE_ +') x
PIVOT
(
MAX(Number)
FOR Name IN ('+@COLUMNS+')
)p'
`PRINT @QRY_
EXECUTE sp_executesql @QRY_;`
[введите описание изображения здесь] [2]
Изображение (по ссылке: введите описание изображения здесь) показывает, что я пытаюсь выполнить.
заранее спасибо T.
введите описание изображения здесь