2013-10-01 2 views
0

У меня есть строковой переменной, которая включает в себя динамический список заголовков столбцов, инициированный как таковой:Как я могу изменить свою динамическую строку имен полей 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 [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]) 

Обратите внимание, однако, что только первое поле (ITEM_CMDT_N) содержит псевдоним. Если я пытаюсь добавить аналогичный код псевдоним второе поле это выглядит следующим образом:

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]) 

Это не очевидно, что я снимаюсь для. Как настроить эту инициализацию строки, чтобы включить псевдонимы для поля 'valv.ITEM_CMDT_N + ' - Date', все еще работая с кодом FOR XML PATH? Благодаря!

ответ

0
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,'') 

 Смежные вопросы

  • Нет связанных вопросов^_^