Sql server 如何更改使用FOR XML PATH生成的SQL字段名的动态字符串以包含别名?

Sql server 如何更改使用FOR XML PATH生成的SQL字段名的动态字符串以包含别名?,sql-server,dynamic-sql,for-xml-path,Sql Server,Dynamic Sql,For Xml Path,我有一个字符串变量,其中包含一个列标题的动态列表,如下所示: DECLARE @Pivot VARCHAR(4000) SELECT @Pivot = STUFF((SELECT DISTINCT ']),MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN

我有一个字符串变量,其中包含一个列标题的动态列表,如下所示:

DECLARE @Pivot VARCHAR(4000) 
SELECT @Pivot = STUFF((SELECT DISTINCT ']),MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN [dbo].[VEND_ASGN] va ON valv.CTRY_C = va.CTRY_C AND valv.CY_DATE_D = va.CY_DATE_D WHERE va.VEND_ASGN_I = 10 AND va.ACTV_F= 1 AND valv.ACTV_F = 1 ORDER BY ']),MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FOR XML PATH('')),1,3,'') + '])'
这是一个很好的工作方式,并产生如下字符串:

MAX([TEST]) AS TEST,MAX([TEST - Date]),MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
SELECT @Pivot = STUFF((SELECT DISTINCT ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN [dbo].[VEND_ASGN] va ON valv.CTRY_C = va.CTRY_C AND valv.CY_DATE_D = va.CY_DATE_D WHERE va.VEND_ASGN_I = 10 AND va.ACTV_F= 1 AND valv.ACTV_F = 1 ORDER BY ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FOR XML PATH('')),1,3,'') + '])'
AS [TEST - Date],MAX([TEST]) AS TEST,MAX([TEST - Date]) AS [TEST2 - Date],MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
但是请注意,只有第一个字段(
ITEM\u CMDT\N
)包含别名。如果我尝试向alias第二个字段添加类似的代码,它如下所示:

MAX([TEST]) AS TEST,MAX([TEST - Date]),MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
SELECT @Pivot = STUFF((SELECT DISTINCT ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN [dbo].[VEND_ASGN] va ON valv.CTRY_C = va.CTRY_C AND valv.CY_DATE_D = va.CY_DATE_D WHERE va.VEND_ASGN_I = 10 AND va.ACTV_F= 1 AND valv.ACTV_F = 1 ORDER BY ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FOR XML PATH('')),1,3,'') + '])'
AS [TEST - Date],MAX([TEST]) AS TEST,MAX([TEST - Date]) AS [TEST2 - Date],MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
并生成如下字符串:

MAX([TEST]) AS TEST,MAX([TEST - Date]),MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
SELECT @Pivot = STUFF((SELECT DISTINCT ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN [dbo].[VEND_ASGN] va ON valv.CTRY_C = va.CTRY_C AND valv.CY_DATE_D = va.CY_DATE_D WHERE va.VEND_ASGN_I = 10 AND va.ACTV_F= 1 AND valv.ACTV_F = 1 ORDER BY ']) AS [' + valv.ITEM_CMDT_N + ' - Date],MAX([' + valv.ITEM_CMDT_N + ']) AS ' + valv.ITEM_CMDT_N + ',MAX([' + valv.ITEM_CMDT_N + ' - Date' FOR XML PATH('')),1,3,'') + '])'
AS [TEST - Date],MAX([TEST]) AS TEST,MAX([TEST - Date]) AS [TEST2 - Date],MAX([TEST2]) AS TEST2,MAX([TEST2 - Date])
这显然不是我拍摄的目的。在仍使用for XML路径代码时,如何调整此字符串初始化以包括字段
'valv.ITEM\u CMDT\u N+'-Date'
的别名?谢谢

SELECT @Pivot = STUFF((SELECT DISTINCT ',MAX([' + valv.ITEM_CMDT_N + ']) AS [' + valv.ITEM_CMDT_N + '],MAX([' + valv.ITEM_CMDT_N + ' - Date]) AS [' + valv.ITEM_CMDT_N + ' - Date]' FROM [dbo].[VEND_ASGN_LKUP_VAL] valv INNER JOIN [dbo].[VEND_ASGN] va ON valv.CTRY_C = va.CTRY_C AND valv.CY_DATE_D = va.CY_DATE_D WHERE va.VEND_ASGN_I = 10 AND va.ACTV_F= 1 AND valv.ACTV_F = 1 ORDER BY ',MAX([' + valv.ITEM_CMDT_N + ']) AS [' + valv.ITEM_CMDT_N + '],MAX([' + valv.ITEM_CMDT_N + ' - Date]) AS [' + valv.ITEM_CMDT_N + ' - Date]' FOR XML PATH('')),1,1,'')