我在尝试构建动态SQL查询时遇到困难:
'USE [SampleDatabase]
DECLARE @COLUMNS NVARCHAR(MAX) = '[CELL], [OFFICE]';
WITH table_CTE (Name, DayOfBirth, Phone) AS
(
SELECT pp.FirstName AS Name
,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) = 06
)
SELECT Name, DayOfBirth, Phone, +@COLUMNS
FROM ((SELECT Name, DayOfBirth, Phone FROM table_CTE) x
PIVOT(
MAX(Name)
FOR Phone IN (@COLUMNS)
))p '
这就是我需要的:
答案 0 :(得分:0)
尝试一下。
经过编辑以创建嵌套动态,因为之前在动态SQL中未包含@COLUMNS。
注意@COLUMNS变量如何与SQL串联。
我将查询更改为选择*,但是您可以根据需要以相同的方式添加@COLUMNS变量
在您的示例中,您的CTE拼写为table_CTE,然后为tableCTE,没有下划线。
DECLARE @query nvarchar(4000)
SET @query =
'DECLARE @COLUMNS NVARCHAR(MAX) = ''[CELL], [OFFICE]'';
DECLARE @query2 NVARCHAR(4000) = ''
WITH table_CTE ([Name], DayOfBirth, Phone) AS
(
SELECT pp.FirstName AS Name
,CONVERT(NVARCHAR(5), pp.Birthday, 103) AS Birthday
,ph.Number
FROM People pp, Phones ph
,PhoneNumberTypes pht
WHERE pp.PersonId = ph.PersonId AND ph.PhoneTypeId = pht.PhoneTypeId
AND MONTH(pp.Birthday) = 06
)
SELECT *
FROM (SELECT [Name], DayOfBirth,Phone FROM table_CTE) x
PIVOT(
MAX(Name)
FOR Phone IN ('' + @COLUMNS + '')
)p''
EXEC(@query2)'
EXEC(@query)