SQL 基于事件顺序的动态列名

SQL dynamic column names based on event order

我需要动态创建根据 运行 事件命名的列。如果我有这样的数据:

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

我需要return的是:

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

我首先可以调用所有 运行,但在动态 运行 中旋转状态以对齐自身是我迷路的地方。我是否必须使用 CTE 来获取 运行s,然后使用 CTE 获取已调用的 TestId 的最大计数,然后基于 1 到 max(count(TestID)) 构建列字符串名称?然后我如何将其放入保持正确状态的列中。是我需要的地方的支点吗?

如果SQL服务器。

您可以使用 window 函数 ROW_NUMBER() 来获得不同的 运行 数字,然后我们简单地 运行 一个最终结果的动态基准

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

Returns

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

Edit

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