2016-12-02 9 views
1

Мне нужно динамически создавать столбцы, имена которых основаны на запуске. Если у меня есть данные, как например:Динамические имена столбцов SQL на основе порядка событий

RunID TestID Status 
----- ------ ------ 
1  200  Passed 
2  200  Failed 
3  300  Failed 
4  400  Not Complete 
5  400  Passed 
6  400  Passed 

Что мне нужно вернуться в:

TestID Run1   Run2 Run3 
------ ----   ---- ---- 
200  Passed  Failed 
300  Failed 
400  Not Complete Passed Passed 

Я первый можно назвать все трассы, но поворотное о состоянии выровнять себя в динамическом периоде, где я свали. Должен ли я использовать CTE для запуска прогонов, а затем для получения максимального количества, которое был вызван TestId, а затем для создания строковых имен столбцов на основе от 1 до max (count (TestID))? Как я могу получить это в столбцы, которые содержат правильный статус. Является стержнем даже там, где мне нужно быть?

ответ

1

Если SQL Server.

Вы можете использовать функцию ROW_NUMBER окна(), чтобы получить отчетливый Run Numbers, а затем просто запустить динамический стержень для окончательных результатов

Declare @SQL varchar(max) 
Select @SQL = Stuff((Select Distinct ',' + QuoteName('Run'+cast(RN as varchar(25))) From (Select Distinct RN=Row_Number() over (Partition By TestID Order By RunID) from YourTable) A Order By 1 For XML Path('')),1,1,'') 
Select @SQL = 'Select TestID,' + @SQL + ' 
       From (
         Select TestID,Item=''Run''+cast(Row_Number() over (Partition By TestID Order By RunID) as varchar(25)),Value=Status 
         From YourTable 
        ) A 
       Pivot (max(Value) For Item in (' + @SQL + ')) p' 
Exec(@SQL); 

Возвращает

TestID Run1   Run2  Run3 
200  Passed   Failed NULL 
300  Failed   NULL  NULL 
400  Not Complete Passed Passed 

Редакция

Select Stuff((Select ',' + QuoteName('Run'+cast(RN as varchar(25))) 
    From (Select Distinct Top 100 Percent RN=Row_Number() over (Partition By RN_TEST_ID Order By RN_RUN_ID) 
      From td.RUN 
      Where RN_CYCLE_ID = 501 
      Order By 1 
     ) A 
    For XML Path('')),1,1,'') code 
+0

Это прекрасно! Спасибо, я даже не рассматривал решение XML PATH для создания имен столбцов. Думаю, мне нужно будет изучить это немного больше. Спасибо, Джон Каппельлетти, ты спас мне здравый смысл. –

+0

@ S.G. Рад был помочь. Взгляд в XML-путь и функции окна стоит того. Cheers :) –

+0

Любой шанс, который вы знаете, лучший способ сохранить столбцы для «Run » на заказ? Чтобы предотвратить «Run1» «Run10»? Также сохраняя значения «NULL» с фактическим прогоном и не доводя до конца? –

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

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