有一个问题,并希望有人能帮助我。在@sqlMain中设置的动态sql目前正在抓取一个名为lg.ColorGroup的列,但实际上我不想抓取该列,但当我删除它时,虽然我无法执行ORDER BY ColorGroup。有没有办法让结果集返回由ColorGroup排序,而不选择它。谢谢!动态SQL - 删除列
INSERT INTO #ServerList
SELECT DISTINCT ServerURL, ServerName, InstanceType
FROM [CR_PIT_01].[dbo].[EFDM_Servers]
WHERE InstanceType = 'Production'
SELECT @ProgramList = STUFF((SELECT ',' + QUOTENAME(ServerName) FROM #ServerList ORDER BY ServerURL FOR XML PATH (''), type).value('.', 'nvarchar(max)'), 1, 1, '')
PRINT @ProgramList
CREATE Table #ServerListGrouped
(
Name varchar(300),
ColorGroup int
)
INSERT INTO #ServerListGrouped
SELECT DISTINCT Name, (case when SUBSTRING(LOWER(Name), 0, 3) = 'y_' then 2 when SUBSTRING(Lower(Name), 0, 3) = 'z_' then 3 when Exists (Select BuiltInField FROM [CR_PIT_01].[dbo].[EFDM_BuiltInFields] WHERE BuiltInField = Name) then 4 else 1 end) As FieldUsage
FROM CR_PIT_01.dbo.EFDM_ProjectFields
ORDER BY FieldUsage ASC, Name
SET @sqlMain = 'SELECT * FROM (SELECT P.Name, lg.ColorGroup, P.'+ @FilterValue +' , S.ServerName FROM [CR_PIT_01].[dbo].[EFDM_ProjectFields] AS P JOIN #ServerList AS S ON S.ServerURL = P.ServerURL Join #ServerListGrouped LG on p.Name = lg.Name) AS P PIVOT (MIN(' + @FilterValue + ') FOR ServerName IN (' + @ProgramList + ')) AS PIV Where Name LIKE (''%' + @Name + '%'') ORDER BY colorgroup, PIV.Name'
--SET @sqlMain = 'SELECT * FROM (SELECT P.Name, P.'+ @FilterValue +' , S.ServerName FROM [CR_PIT_01].[dbo].[EFDM_ProjectFields] AS P JOIN #ServerList AS S ON S.ServerURL = P.ServerURL) AS P PIVOT (MIN(' + @FilterValue + ') FOR ServerName IN (' + @ProgramList + ')) AS PIV Where Name LIKE (''%' + @Name + '%'') ORDER BY PIV.Name;'
PRINT @sqlMain;
--EXEC sp_executesql @sqlMain;
DROP TABLE #ServerList
DROP TABLE #ServerListGrouped
谢谢
我不知道的是,'ORDER BY'在'INSERT ... SELECT'实际上做任何有用的东西。你不一定保证以相同的顺序返回它们,它看起来就像你正在加入那个临时表。订单没有意义,所以这一步可以消除。 – Shawn